将/ etc / environment变量导出到当前环境;从shell脚本?

时间:2014-02-02 14:45:13

标签: bash shell export environment-variables scope

如何将/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/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

1 个答案:

答案 0 :(得分:3)

执行脚本时:

bash ./file.bash

或者其他:

./file1.bash

像这样运行一个shell脚本会启动一个新进程,一个子shell

子shell 中创建的所有变量在子shell中的代码块之外是不可见的。父进程无法访问它们,无法访问启动子shell的shell。实际上,这些是子进程本地的变量。请注意,导出变量也不会使它们在父shell中可用。这只是使它们可用于运行子shell的更多子shell。

要更改此行为,您可以使用以下任意方式强制脚本在当前shell 中执行:

source ./file1.bash

OR

. ./file1.bash