如何让别名在所有 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 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何让这个动画在 Edge 中工作?

如何让快速网关在 Kubernetes 中工作?

如何让 window.focus() 在 Firefox 中工作 [重复]

如何让 Perf 在 Azure VM 中工作?

如何让 AutoIt 参考在 C# 中工作?

如何让这个 Javascript 字谜算法在 Ruby 中工作?