【问题标题】:why is Makefile not executing alias statement [duplicate]为什么Makefile不执行别名语句[重复]
【发布时间】:2020-02-01 23:43:42
【问题描述】:

我正在处理一个需要生成文件并需要解析下面的输入作为示例的类项目 制作 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)

我创建了一个 Makefile

all:
    alias testapp="python3 myapp.py"

这样做应该可以让我写 $ testapp arg1 arg2 arg3... 如果我手动将别名语句输入到终端中,它可以正常工作,但是在 Makefile 中运行时, 它对我不起作用。关于解决此问题的任何想法?提前谢谢你

【问题讨论】:

    标签: makefile


    【解决方案1】:

    这并不特定于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 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-05
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多