Makefile添加别名

时间:2018-06-20 02:11:00

标签: bash makefile sh

我已经在使用一个makefile,我希望能够使用它来存储一些有用的别名,然后用户可以调用它们。我知道我可以使用已经内置的别名制作一个bash文件,因此可以使用source运行它,因此我可以执行以下操作:

# File: aliases.sh
alias useful="command to run"
alias also-useful="another command -to run"

然后我可以在当前的终端会话中使用以下命令运行该命令:

source ./aliases.sh

使用Makefile

所以我希望通过makefile实现类似的功能,希望有一个简单的aliases条目,以便用户可以运行:

make aliases

如果可能的话,我宁愿避免添加额外的文件,因为我不想为这样的简单任务添加额外的文件。如果您有任何更好的建议,我也乐于听取。谢谢你。

1 个答案:

答案 0 :(得分:2)

如果您要的是make aliases创建别名,然后可以在shell提示符下调用它,例如:

$ make aliases
$ useful

然后那是不可能的,原因与make无关。

在UNIX / POSIX系统中,流程层次结构很严格:一个流程启动一个或多个子流程,每个子流程都可以启动更多,依此类推。因此,登录管理器流程启动您的Shell(或窗口管理器),您的shell启动make,这是另一个过程,make将运行另一个shell作为子过程来运行每个配方,并且每个shell将运行诸如编译器之类的程序,诸如rm之类的命令也可以处理等等。

这是所有进程的基本规则,即他们不能修改其父母的环境(内存)(并且只能在其子女开始之前对其子女的环境进行修改)。因此,如果您启动一个新的Shell并更改您的工作目录,然后退出该Shell,则不会更改父级的Shell。如果在子进程中设置环境变量,则不会在父进程中设置该变量。等等

Shell别名是特定Shell内存的一部分。因此,您启动的程序无法在其父外壳中创建别名。该程序是make还是其他程序都没关系。

这就是为什么必须使用特殊命令source将它们加载到您的shell中的原因:source命令告诉当前的shell以如下方式运行脚本中的命令,而不是运行新的shell:如果您在命令行中输入了它们,则不会创建新进程,也不会修改当前shell的环境和内存。如果通过aliases而不是aliasessource aliases文件作为shell脚本运行,则将创建一个新的shell,定义别名,然后退出该shell,并且所有别名会消失。

因此,所有这些make不可能在调用它的shell中定义别名:操作系统不允许。