我有一些我需要调试的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:not found
很明显它试图运行它而不是设置变量。
你发现什么是这个问题最快的解决方法?
答案 0 :(得分:4)
while read line; do
declare "$line"
# declare -x "$line"
# export "$line"
done < env.txt
如果要将值导出到环境中,请使用-x
declare
选项或使用export
命令。
答案 1 :(得分:3)
在将输出重定向到文件之前添加双引号:
env | sed 's/=\(.*\)/="\1"/' > env.txt
答案 2 :(得分:1)
while read line; do
var="${line%=*}"
value="${line##*=}"
eval "$var=\"$value\""
done <env.txt