为什么我的 bash 脚本不能导出变量?

dan*_*nio 4 bash environment-variables

我正在使用 MSYS 并有一个文件 vars.txt ,其中包含变量值键,例如:

WINDIR C:/WINDOWS
STS_BUILD_DIRECTORY D:/STS/TMP
ALLUSERSPROFILE C:/Documents and Settings/All Users
Run Code Online (Sandbox Code Playgroud)

我想读入并设置环境变量。我有一个 bash 脚本 setenv:

while read var value;
do
  echo "performing export $var=$value"
  export $var='$value'
done 
Run Code Online (Sandbox Code Playgroud)

我用

cat vars.txt | source setenv
Run Code Online (Sandbox Code Playgroud)

但是在我的环境中没有设置变量。我也试过把它变成一个函数,但没有乐趣。这里有人知道我做错了什么吗?谢谢。

Den*_*son 7

管道设置了一个子壳。当子shell退出时,变量会丢失。

尝试这个:

source setenv < vars.txt
Run Code Online (Sandbox Code Playgroud)

此外,您的单引号可能会阻止变量的扩展(我不知道 MSYS 中是否如此)。尝试将export行更改为:

export $var="$value"
Run Code Online (Sandbox Code Playgroud)

如果不需要导出变量declareexport则可以使用代替。

  • @danio:我只是根据你的例子来回答。你说你“有一个文件”。我不知道你还没有这个文件。您可以在 Bash 中使用进程替换:`source apply_env &lt; &lt;(generate_envmap)` (2认同)