为什么在非交互式Bash shell中的别名不起作用

我正在尝试在非交互式bash shell中使用别名。 我在~/.bashrc定义了别名,并且设置了variablesBASH_ENV=~/startUpFile 。 startUpFile的内容是source〜 source ~/.bashrc

我可以看到,当我执行alias命令时,我的别名被识别。 但是,如果我尝试使用~/.bashrc定义的别名,Bash将无法识别它。 它给了我未知的命令错误。

使用TCSHshell很容易做到这一点,因为总是读取~/.cshrc文件。

任何想法,我可以做一个Bash shell这个?

命令shopt -s expand_aliases将允许在非交互式shell中进行别名扩展。

.bashrc仅由交互式shell处理。

另外,除非使用shopt设置expand_aliasesshell选项,否则在shell不交互时不会扩展别名。 当然,除非用名字sh而不是bash调用shell,否则调用POSIX模式。

大量使用别名的用户通常会在其configuration文件末尾input.bashrc ,以便在非交互式shell中使用别名。 这可能不是最好的方法,但是这很常见。

就是这样的事情导致我相信,在21世纪,我们应该抛弃shell脚本,转而使用像Python这样的全面语言。 这是更可预测的。

你必须

 shopt -s expand_aliases 

在你的BASH_ENV指向的文件中

我有类似的问题,最后,我发现〜/ .bashrc是我所需要的。

但是,在Ubuntu中,我不得不评论停止处理的行〜/ .bashrc:

 If not running interactively, don't do anything [ -z "$PS1" ] && return