我正在尝试在非交互式bash shell中使用别名。我在~/.bashrc
中定义了别名,并设置了变量BASH_ENV=~/startUpFile
。 startUpFile的内容为source ~/.bashrc
。
当我执行alias
命令时,我可以看到我的别名被识别。但是,如果我尝试使用~/.bashrc
中定义的别名,Bash无法识别它。它给了我未知的命令错误。
使用TCSH shell可以很容易地执行此操作,因为始终会读取~/.cshrc
文件。
我有什么想法可以用Bash shell做到这一点?
答案 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