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

Passing variable values from one script after executing the first script and we execute second script manually

我需要在 shell 脚本中实现。

有两个脚本script1、script2。当我 运行 第一个脚本时,创建了两个变量并具有一些值。它将完成它的执行。 (当脚本完成执行时,这些值将在此处,对吗?)

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

现在我想把在脚本 1 中创建的变量放到脚本 2 中。这可能吗?

编辑:

Charles 的回答是正确的,因为这会导致代码注入,但如果您不关心安全性(您应该),那么这将起作用。

使用来源或“.”并将变量导出到文件

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
$

不要 生成要sourceed 或evaled 的内容,除非您准备好处理与之相关的安全问题。

编写 NUL 分隔流(与 Linux 用于在 /proc/*/environ 中公开环境变量内容的格式相同)更安全:

tempfile=$(mktemp vars.XXXXXX)
for varname in var1 var2; do
  printf '%s=%s[=10=]' "$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