如何将/etc/environment
的环境变量带到终端及其所称的内容?
#!/usr/bin/env bash
bash ./file1.bash
echo $FOO_BAR
for line in $( sudo cat /etc/environment ); do export $line; done
#!/usr/bin/env bash
sudo sed -i '/^FOO_BAR/d' /etc/environment
printf FOO_BAR="$HOME/Foo\n" | 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
答案 0 :(得分:3)
执行脚本时:
bash ./file.bash
或者其他:
./file1.bash
像这样运行一个shell脚本会启动一个新进程,一个子shell 。
在子shell 中创建的所有变量在子shell中的代码块之外是不可见的。父进程无法访问它们,无法访问启动子shell的shell。实际上,这些是子进程本地的变量。请注意,导出变量也不会使它们在父shell中可用。这只是使它们可用于运行子shell的更多子shell。
要更改此行为,您可以使用以下任意方式强制脚本在当前shell 中执行:
source ./file1.bash
OR
. ./file1.bash