使用 --rcfile 和 -c 在新的 bash shell 中运行命令

使用 --rcfile 和 -c 在新的 bash shell 中运行命令

我正在运行以下命令并期望它会返回BAR,因为我创建的新 shell 将首先运行 .mybashrc,它将在$FOO之前设置的位置echo $FOO执行。

bash --rcfile .mybashrc -c 'echo $FOO'

.mybashrc:

export FOO="BAR"

但结果却是空的。哪里出了问题?

答案1

默认情况下,非交互式bash执行不会加载初始化文件,例如.bashrc或选项的目标--rcfile。如man页面中所述:

An interactive shell is one started without non-option arguments and without
the -c option whose standard input and error are both connected to terminals
... or one started with the -i option.

bash因此,您可以通过强制像交互式 shell 一样运行来获得所需的行为-i

bash --rcfile .mybashrc -ci 'echo $FOO'

答案2

运行交互式命令bash -i不是一个好的解决方案,它在可能(很可能)没有终端的情况下声明一个终端 TTY,因为大多数人都希望他们的bash -c命令能够批量处理、记录和无人值守地运行。

我喜欢的方式是在前面添加‘.’(点)命令来将配置文件加载到用户环境中:

bash -c '. ~/.mybashrc && echo $FOO'

相关内容