为什么非交互的Bash shell别名不工作(Why aliases in a non-intera

2019-08-31 20:27发布

我想在一个非交互式bash shell中使用别名。 我在我的定义别名~/.bashrc ,我已经设置变量BASH_ENV=~/startUpFile 。 所述startUpFile的内容source ~/.bashrc

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

随着tcsh外壳这是很容易做到这一点,因为在~/.cshrc的文件总是被读出。

任何想法如何,我可以用Bash shell中做到这一点?

Answer 1:

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



Answer 2:

.bashrc仅交互shell处理。

此外,别名不是当shell不是交互,除非扩大, expand_aliases外壳选择是使用设置shopt 。 除非,当然,POSIX模式是通过调用名为外壳调用sh代替bash

谁使用别名很多人经常采购他们.bashrc在他们的个人资料的结束,这样的别名甚至有非交互shell。 这可能不是最好的方式,但它是很常见的。

它是像这样的事情,导致我相信,在21世纪,我们应该支持像Python一个完全成熟的语言,放弃shell脚本。 这是一个很多更容易预测。



Answer 3:

你必须

shopt -s expand_aliases

在该文件中指出,在您的BASH_ENV



Answer 4:

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

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

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


文章来源: Why aliases in a non-interactive Bash shell do not work