将命令字符串保存到 bash 变量中

将命令字符串保存到 bash 变量中

我正在运行这样的命令,变量$OUTPUT保存命令的结果。但我还想将命令本身保存到一个变量中,以便包含在状态电子邮件中。

OUTPUT=$(php -f $LOCATION/somefile.php -- -process "$INPUTFILE" 2>&1)

第一部分有效。然后我尝试了这个:

IMPORTCOMMAND='php -f' "$LOCATION"'/somefile.php -- -process'"$INPUTFILE"

但它似乎只是第二次执行命令,而不是将字符串保存到变量中。

编辑:

这是我如何创建电子邮件正文的模型。我在常规字符串周围加上单引号,然后在 bash 变量周围加上双引号。

BODY='<b color="red">Output:</b><br />'"$OUTPUT"'<b color="red">Command:</b> '"$IMPORTCOMMAND"

之后我尝试用 html "
" 替换换行符,如下所示:

BODY="${BODY//$'\n'/<br />}"
#changed $BODY="" to BODY="" per yaegashi's suggestion

在我遵循 yaegashi 的建议后,以下错误消失了:

/usr/local/bin/some-script.sh: line 59: <b: command not found

但原来的错误仍然存​​在,在IMPORTCOMMAND变量赋值处。

答案1

我认为你引用了太多而且位置错误。

以下将尝试运行并且不设置 IMPORTCOMMAND,因为和somefile.php之间有空格php -fsomefile.php.

IMPORTCOMMAND='php -f' "$LOCATION"'/somefile.php -- -process'"$INPUTFILE"

应该:

import_command="php -f $LOCATION/somefile.php -- -process $INPUTFILE"
output=$( ${import_command} 2>&1 )

OR(如果“LOCATION”或“INPUTFILE”包含空格)

import_command=( php -f "$LOCATION/somefile.php" -- -process "$INPUTFILE" )
output=$( "${import_command[@]}" 2>&1 )

并显示它:

BODY="<b color='red'>Output:</b><br />${output}
      <b color='red'>Command:</b>     ${import_command[*]}"

相关内容