我有以下test.sh脚本:
#!/bin/sh
echo "MY_VARIABLE=$MY_VARIABLE"
好吧,如果我执行以下操作:
export MY_VARIABLE=SOMEVALUE
/bin/bash test.sh
它打印:
MY_VARIABLE=
为什么在test.sh脚本中未读取MY_VARIABLE?
您可以使用以下脚本重现上下文here:
touch test.sh
chmod a+x test.sh
echo "#!/bin/sh" >> test.sh
echo "echo "MY_VARIABLE=$MY_VARIABLE"" >> test.sh
export MY_VARIABLE=something
/bin/bash test.sh
答案 0 :(得分:3)
在用于创建上下文的脚本中,该行
echo "echo "MY_VARIABLE=$MY_VARIABLE"" >> test.sh
在test.sh
中创建以下行:
echo MY_VARIABLE=
如果之前未设置MY_VARIABLE
。 $MY_VARIABLE
的扩展是在准备上下文的shell中完成的。
如果使用单引号
echo 'echo "MY_VARIABLE=$MY_VARIABLE"' >> test.sh
脚本test.sh
包含正确的行
echo "MY_VARIABLE=$MY_VARIABLE"
并按预期打印MY_VARIABLE=something
。
答案 1 :(得分:0)
一切正常,但是如果您想让父进程保持环境更新,则必须source
您的脚本:
source test.sh
否则,更改仅在脚本执行期间生效。
您可以将其视为与采购~/.bashrc
文件相同。