如何将环境变量从 /etc/environment
带到终端及其所谓的变量?
file0.bash
#!/usr/bin/env bash
bash ./file1.bash
echo $FOO_BAR
for line in $( sudo cat /etc/environment ); do export $line; done
file1.bash
#!/usr/bin/env bash
sudo sed -i '/^FOO_BAR/d' /etc/environment
printf FOO_BAR="$HOME/Foon" | sudo tee -a /etc/environment
for line in $( sudo cat /etc/environment ); do export $line; done
控制台
$ echo $FOO_BAR
$ bash file0.bash
[sudo] password for myusername:
FOO_BAR=/home/myusername/Foo
$ echo $FOO_BAR
$ # What I want to avoid is having to revert to this:
$ for line in $( sudo cat /etc/environment ); do export $line; done
$ echo $FOO_BAR
/home/myusername/Foo
执行脚本为:
bash ./file.bash
否则:
./file1.bash
运行类似的shell脚本启动一个新过程,a 子壳。
在 subshell 中创建的所有变量在子壳中的代码块之外都不可见。它们无法访问父进程,即启动子壳的外壳。实际上,这些是儿童过程本地的变量。请注意,导出变量也不会使它们在父壳中可用。这只是使它们可用于进一步的运行子壳的子壳。
要更改此行为,您可以使用以下两种方法中的任何一个。
source ./file1.bash
或
. ./file1.bash