在执行第一个脚本后从一个脚本传递变量值,我们手动执行第二个脚本
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
$
不要 生成要source
ed 或eval
ed 的内容,除非您准备好处理与之相关的安全问题。
编写 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
我需要在 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
$
不要 生成要source
ed 或eval
ed 的内容,除非您准备好处理与之相关的安全问题。
编写 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