我有一个要在shell脚本中实现的要求。
有两个脚本script1,script2。当我运行第一个脚本时,将创建两个变量并具有一些值。它将完成执行。 (这些值就在这里,因为脚本执行正确了吗?)
Script2稍后将再次手动执行(不确定该脚本何时执行,可能需要30分钟甚至1天,因为我们必须在script1运行后修复某些问题。)
现在我想将在脚本1中创建的变量包含到脚本2中。
答案 0 :(得分:2)
请勿生成source
或eval
中要包含的内容,除非您准备处理与之相关的安全性问题。
编写NUL分隔的流(Linux在/proc/*/environ
中公开环境变量内容所用的相同格式)更加安全:
tempfile=$(mktemp vars.XXXXXX)
for varname in var1 var2; do
printf '%s=%s\0' "$varname" "${!varname}"
done >"$tempfile"
mv -- "$tempfile" varfile # this is an atomic operation, so you can't have a half-written varfile
...然后再读一遍:
while IFS= read -r -d '' assignment; do
[[ $assignment = *=* ]] || { printf 'ERROR: No = found in %q\n' "$assignment" >&2; continue; }
var=${assignment%%=*}
value=${assignment#*=}
printf -v "$var" %s "$value"
done <varfile
答案 1 :(得分:1)
编辑:
查尔斯的答案是正确的答案,因为这可能导致代码注入,但是如果您不关心安全性(<应该>),那么这将起作用。
使用来源或“。”并将变量导出到文件中
script1.sh:
var1='foo'
var2='bar'
cat > varfile <<-EOF
var1="${var1}"
var2="${var2}"
EOF
script2.sh:
. varfile
echo "${var1} ${var2}"
输出:
$ ./script1.sh
$ ./script2.sh
foo bar
$