如何让别名在所有 shell 中工作?
Posted
技术标签:
【中文标题】如何让别名在所有 shell 中工作?【英文标题】:How do I make aliases work across all the shells? 【发布时间】:2014-04-19 16:37:10 【问题描述】:我一直在尝试让别名在 bash shell 中工作。现在,假设我愿意 别名 yum='yum -v' 在我的 shell 中。当我从 CLI 运行命令时,它可以工作。但是当我运行脚本时,它没有任何效果。如何使别名在 shell 中工作?
【问题讨论】:
您可以将脚本源设为您的~/.bashrc
或任何包含这些别名的文件。
试过了,不行!
应该的。见using alias in shell script
@fredtantini 别名扩展在非交互式 shell 中默认禁用。
@chepner 谢谢,我不知道。在 ksh 中使用 . /home/fti/.bash_aliases
\n ll
运行脚本时,我的 ll
bash 别名被执行了……
【参考方案1】:
在 bash 中,你可以导出函数,所以如果你这样做:
yum() command yum -v "$@";
export -f yum
那么 yum 的“别名”将保留在子 shell 中。请注意,函数几乎总是优于别名,并且(来自 bash 手册页)“对于几乎所有目的,别名都被 shell 函数取代。”。我认为最初的子句“几乎所有目的”只是夸张的说法,“几乎”可以安全地省略。
【讨论】:
【参考方案2】:来自bash
联机帮助页:
当 shell 不是交互式时,别名不会展开,除非 expand_aliases shell 选项是使用 shopt 设置的(参见 在下面的 SHELL BUILTIN COMMANDS 下购物)。
因此,您需要在脚本中执行以下操作。:
shopt -s expand_aliases
您还需要使用别名(.bashrc
、.bash_profile
、.bash_login
等)获取文件。
shopt -s expand_aliases
source /path/to/alias/file
请注意,在你的 shell 脚本中使用alias
会降低它的可移植性,因为在没有有你的别名的环境中运行时它会中断。
【讨论】:
以上是关于如何让别名在所有 shell 中工作?的主要内容,如果未能解决你的问题,请参考以下文章