54

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

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

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

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

4

4 回答 4

55

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

于 2009-10-23T21:24:21.960 回答
15

.bashrc仅由交互式 shell 处理。

此外,当 shell 不是交互式时,别名不会扩展,除非expand_aliasesshell 选项使用shopt. 当然,除非通过使用名称sh而不是bash.

经常使用别名的人通常会.bashrc在其个人资料的末尾获取别名,这样即使非交互式 shell 也可以使用别名。这可能不是最好的方法,但它很常见。

正是这样的事情让我相信,在 21 世纪,我们应该放弃 shell 脚本,转而支持像 Python 这样成熟的语言。这更可预测。

于 2009-10-23T21:18:26.090 回答
12

你必须

shopt -s expand_aliases

在您指向的文件中BASH_ENV

于 2009-10-23T21:12:14.247 回答
3

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

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

If not running interactively, don't do anything
[ -z "$PS1" ] && return
于 2010-11-13T17:21:41.293 回答