我已经在使用makefile,我希望能够使用它来存储一些有用的别名,然后用户可以调用这些别名。我知道我可以使用已经内置的别名创建bash文件,然后使用源代码运行它,因此我可以这样做:
# File: aliases.sh
alias useful="command to run"
alias also-useful="another command -to run"
然后,我可以在当前终端会话中运行以下内容:
source ./aliases.sh
使用Makefile
所以我希望用makefile来实现类似的东西,我希望有一个简单的aliases
条目,这样用户就可以运行:
make aliases
如果可能的话,我更愿意避免添加额外的文件,因为我不想为这样简单的任务添加额外的文件。如果你有什么更好的建议,我也愿意听听。
发布于 2018-06-19 19:38:25
如果您要求make aliases
创建别名,然后可以在shell提示符下调用这些别名,如下所示:
$ make aliases
$ useful
这是不可能的,其原因与make
无关。
在UNIX/POSIX系统中,进程层次结构是严格的:一个进程启动一个或多个子进程,每个子进程可以启动更多进程等等。因此,登录管理器进程启动您的shell (或窗口管理器),您的shell启动make
,这是另一个进程,make
将运行另一个shell作为子进程来运行每个菜谱,每个shell将运行程序,比如编译器、命令(也是进程),等等。
所有进程的基本规则是,它们不能修改父进程的环境(内存)(并且只能在启动之前修改其子进程的环境)。因此,如果启动一个新的shell并更改您的工作目录,然后退出该shell,则父程序的shell不会更改。如果在子进程中设置了环境变量,则该变量不会在父进程中设置。等。
Shell别名是特定shell内存的一部分。因此,您启动的程序不能在其父shell中创建别名。不管该程序是make
还是其他任何东西,都不重要。
这就是为什么您必须使用特殊命令source
将这些命令加载到您的shell中:source
命令没有运行新的shell,而是告诉当前shell在脚本中运行命令,就像您在命令行中键入命令一样.因此,不创建新的进程,修改当前shell的环境和内存。如果您将aliases
文件作为shell脚本运行,通过aliases
而不是source aliases
运行,那么将创建一个新的shell,定义别名,然后shell将退出,所有别名将再次消失。
所以说,make
不可能在调用它的shell中定义别名:操作系统不允许它。
https://stackoverflow.com/questions/50939213
复制