为什么在非交互式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_aliases
shell选项,否则在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