Bash 如何使别名跨所有壳工作?

Bash 如何使别名跨所有壳工作?,bash,shell,aliases,Bash,Shell,Aliases,我一直在努力使别名在bashshell中工作。现在,让我们说我喜欢 我的shell中的别名为yum='yum-v'。当我从CLI运行命令时,它会工作。但是当我运行脚本时,它没有任何效果。如何使别名在shell中工作?在bash中,您可以导出函数,因此如果您这样做: yum() { command yum -v "$@"; } export -f yum 然后,yum的“别名”将保留在子shell中。请注意,函数几乎总是首选别名,并且(从bash手册页上看)“对于几乎所有用途,别名都被shell

我一直在努力使别名在bashshell中工作。现在,让我们说我喜欢
我的shell中的别名为yum='yum-v'。当我从CLI运行命令时,它会工作。但是当我运行脚本时,它没有任何效果。如何使别名在shell中工作?

在bash中,您可以导出函数,因此如果您这样做:

yum() { command yum -v "$@"; }
export -f yum

然后,yum的“别名”将保留在子shell中。请注意,函数几乎总是首选别名,并且(从bash手册页上看)“对于几乎所有用途,别名都被shell函数取代。”。我相信最初的条款“几乎所有目的”只是hyberbole,“几乎”可以安全地省略。

来自
bash
手册:

当shell不交互时,别名不会展开,除非 expand_aliases shell选项是使用shopt设置的(请参见 shopt下的SHELL内置命令)

因此,您需要在脚本中执行以下操作:

shopt -s expand_aliases
您还需要使用别名(
.bashrc
.bash\u profile
.bash\u login
等)来源文件


请注意,在shell脚本中使用
别名将降低其可移植性,因为在没有别名的环境中运行时,该脚本将中断

您可以将脚本源代码设置为您的
~/.bashrc
或包含这些别名的任何文件。请尝试,但无法使用!应该这样。请参阅@fredtantini Alias expansion在非交互式Shell中默认禁用。@chepner谢谢,我不知道这一点。使用
运行脚本时/home/fti/.bash\u别名
\n
ll
在ksh中,执行了my
ll
bash别名…
shopt -s expand_aliases
source /path/to/alias/file