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

Why aliases in a non-interactive Bash shell do not work

我尝试在非交互式bash shell中使用别名。我在~/.bashrc中定义了别名,并设置了变量BASH_ENV=~/startUpFile。启动文件的内容是source ~/.bashrc

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

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

我能用巴什壳做这个吗?


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


.bashrc仅由交互shell处理。

此外,除非使用shopt设置expand_aliasesshell选项,否则当shell不交互时,别名不会展开。当然,除非通过调用名为sh而不是bash的shell来调用posix模式。

经常使用别名的人通常会在配置文件的末尾找到他们的.bashrc,这样即使对于非交互shell,别名也会存在。这可能不是最好的方法,但很常见。

正是这样的事情让我相信,在21世纪,我们应该放弃shell脚本,转而使用像python这样成熟的语言。更容易预测。


你必须

1
shopt -s expand_aliases

在你的EDOCX1中指向的文件中


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

但是,在Ubuntu中,我不得不对停止处理的行进行注释~/。bashrc:

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