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

时间:2009-10-23 21:01:28

标签: bash alias non-interactive

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

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

使用TCSH shell可以很容易地执行此操作,因为始终会读取~/.cshrc文件。

我有什么想法可以用Bash shell做到这一点?

4 个答案:

答案 0 :(得分:43)

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

答案 1 :(得分:15)

.bashrc仅由交互式shell处理。

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

经常使用别名的人经常在他们的个人资料的末尾找到他们的.bashrc,以便即使对于非交互式的shell也会有别名。这可能不是最好的方式,但它很常见。

这样的事情让我相信,在21世纪,我们应该放弃shell脚本,转而使用像Python这样的成熟语言。它更具可预测性。

答案 2 :(得分:7)

你必须

shopt -s expand_aliases

BASH_ENV

指向的文件中

答案 3 :(得分:3)

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

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

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