我正在运行以下命令并期望它会返回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'