在执行第一个脚本后从一个脚本传递变量值,然后我们手动执行第二个脚本

时间:2020-01-23 16:35:35

标签: bash shell sh

我有一个要在shell脚本中实现的要求。

有两个脚本script1,script2。当我运行第一个脚本时,将创建两个变量并具有一些值。它将完成执行。 (这些值就在这里,因为脚本执行正确了吗?)

Script2稍后将再次手动执行(不确定该脚本何时执行,可能需要30分钟甚至1天,因为我们必须在script1运行后修复某些问题。)

现在我想将在脚本1中创建的变量包含到脚本2中。

2 个答案:

答案 0 :(得分:2)

请勿生成sourceeval中要包含的内容,除非您准备处理与之相关的安全性问题。

编写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
$