6

我有一些需要调试的 shell 代码,所以我让代码将其环境转储到一个文件中

env > env.txt

并使用我的测试脚本来获取它,test.sh:

. ./env.txt
echo $EXAMPLE
echo $EXAMPLE2

env.txt 的内容是:

EXAMPLE=sh /hello/command.sh
EXAMPLE2=/just/some/path

但是,env 没有在其值周围加上引号,这往往会导致 $EXAMPLE 出现问题,我收到此错误

test.sh:/hello/command.sh:未找到

很明显它正在尝试运行它而不是设置变量。

您认为解决此问题的最快方法是什么?

4

3 回答 3

11

在将输出重定向到文件之前添加双引号:

env | sed 's/=\(.*\)/="\1"/' > env.txt
于 2013-03-05T23:02:14.380 回答
5
while read line; do
    declare "$line"
    # declare -x "$line"
    # export "$line"
done < env.txt

如果要将值导出到环境,请改用-xto 选项declare或使用export命令。

于 2013-03-06T13:29:29.247 回答
1
while read line; do
 var="${line%=*}"
 value="${line##*=}"
 eval "$var=\"$value\""
done <env.txt
于 2013-03-05T23:06:56.243 回答