为什么生成文件不执行别名语句



我正在处理一个需要 makefile 的类项目,需要解析下面的输入作为示例 做 MyApp Arg1 Arg2 Arg3 Arg4....

所以我创建了一个 myapp.py

import sys
program_name = sys.argv[0]
arguments = sys.argv[1:]
count = len(arguments)
for x in sys.argv:
print("Argument: ", x)

我创建了一个生成文件

all:
alias testapp="python3 myapp.py"

这样做应该允许我写 $ testapp arg1 arg2 arg3... 如果我手动将别名语句输入终端,它可以正常工作,但是在 Makefile 中运行时, 它对我不起作用。对此的解决方法有什么想法吗? 提前谢谢你

这不是特定于make的。

默认情况下,别名仅在交互式 shell 中受支持。

此外,在子进程中运行的任何代码(即您运行的任何非内置 shell 的命令(将无法更改父进程中的任何内容(别名、变量等(。因此,您不能使用make、脚本或任何其他外部命令更改当前 shell 的行为(除非你使 shell 合作,例如通过使用内置的 shell 来评估子进程打印的代码 -evalsource是使 shell 协作的两种常用方法(。

实现您想要的目标的一种简单方法是确保myapp.py有一个有效的 shebang 作为其第一行

#!/usr/bin/env python3

然后使文件可执行;

chmod +x myapp.py

然后创建一个指向它的符号链接,其中包含要在PATH上存在的目录中使用的名称。假设$HOME/bin已经存在并且已经在您的PATH上,只需

ln -s $(pwd)/myapp.py $HOME/bin/testapp

在具有myapp.py的目录中。

别名有一些缺点;也许更喜欢可以使用别名的 shell 函数。

最新更新