首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >添加shell别名的Makefile

添加shell别名的Makefile
EN

Stack Overflow用户
提问于 2018-06-20 02:10:59
回答 1查看 2K关注 0票数 3

我已经在使用makefile,我希望能够使用它来存储一些有用的别名,然后用户可以调用这些别名。我知道我可以使用已经内置的别名创建bash文件,然后使用源代码运行它,因此我可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
# File: aliases.sh
alias useful="command to run"
alias also-useful="another command -to run"

然后,我可以在当前终端会话中运行以下内容:

代码语言:javascript
代码运行次数:0
运行
复制
source ./aliases.sh

使用Makefile

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

代码语言:javascript
代码运行次数:0
运行
复制
make aliases

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 03:38:25

如果您要求make aliases创建别名,然后可以在shell提示符下调用这些别名,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
$ 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中定义别名:操作系统不允许它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50939213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档