命令替换和变量

问题描述 投票:0回答:1

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

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}

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

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

谢谢

shell sh ksh
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.