gpt4 book ai didi

bash - 用于添加 shell 别名的 Makefile

转载 作者:行者123 更新时间:2023-12-04 01:33:25 26 4
gpt4 key购买 nike

我已经在使用一个 makefile,我希望能够用它来存储一些有用的别名,用户随后可以调用这些别名。我知道我可以用已经内置的别名制作一个 bash 文件,然后用源代码运行它,这样我就可以做类似的事情:

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

然后我可以在当前终端 session 中运行它:

source ./aliases.sh

使用生成文件

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

make aliases

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

最佳答案

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

$ make aliases
$ useful

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

在 UNIX/POSIX 系统中,进程层次结构是严格的:一个进程启动一个或多个子进程,每个子进程可以启动更多,等等。所以登录管理器进程启动你的 shell(或你的窗口管理器),你的 shell 启动了 make,这是另一个进程,make 将运行另一个 shell 作为子进程来运行每个配方,每个 shell 将运行编译器之类的程序,之类的命令code>rm 也是进程等

所有进程的基本规则是它们不能修改父进程的环境(内存)(它们只能在子进程启动前修改其环境)。因此,如果您启动一个新的 shell 并更改您的工作目录然后退出该 shell,则父 shell 不会更改。如果在子进程中设置环境变量,则不会在父进程中设置该变量。等等

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

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

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

关于bash - 用于添加 shell 别名的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50939213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com