导出 /ETC /环境变量到当前环境;来自外壳脚本



如何将环境变量从 /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

最新更新