命令替换和变量

时间:2019-11-02 09:38:00

标签: shell sh ksh

我遇到了需要帮助的命令替换问题。我有一些使用需要执行的命令来创建文本文件的过程。

File1.txt

Command_ID|Command_Name|Command
112121|Export XML Components|/Scripts/Export_XML.sh "Argument1" "Argument2"
112122|Test XML integrity|/Scripts/Test_XML.sh "Argument1" "Argument2" "Argument3"

我的执行这些命令的脚本读取File1.txt并尝试使用以下命令替换执行第三列中的命令。此处的目标是顺序读取和执行命令,并使用其返回字符串和返回代码更新表。如果遇到非零返回码,脚本中还有逻辑可以停止处理并存储当前行号。解决问题后,可以从失败的行重新启动脚本

VAR_File=/files/File1.txt

while IFS=$'|' read -r -a myArray
do
 echo "${myArray[2]}"
 VAR_Command="${myArray[2]}"
 VAR_Return_String=$("${VAR_Command}")
 VAR_Return_Code=$?
done < ${VAR_File}

参数带有双引号的命令未正确执行。

我在做什么错,我该如何解决?

谢谢

1 个答案:

答案 0 :(得分:0)

在脚本中,VAR_Command被设置为File1.txt中的某个字符串,例如/Scripts/Export_XML.sh "Argument1" "Argument2"

使用此字符串运行$(${VAR_Command}"时,shell尝试执行名为Export_XML.sh "Argument1" "Argument2"的脚本(文件名内带有引号),而不是参数{的脚本Test_XML.sh {1}}和"Argument1"被传递。

如果通过将"Argument2"替换为$("${VAR_Command}")来删除引号,则您的代码将按预期工作。