Подстановка команд и переменные - PullRequest
0 голосов
/ 02 ноября 2019

У меня проблема с подстановкой команд, с которой мне нужна помощь. У меня есть несколько процессов, которые создают текстовый файл с командами, которые должны быть выполнены.

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 голосов
/ 02 ноября 2019

В вашем сценарии VAR_Command установлена ​​на некоторую строку из File1.txt, например /Scripts/Export_XML.sh "Argument1" "Argument2".

При запуске $(${VAR_Command}" с этой строкой оболочка пытается выполнить сценарий с именем Export_XML.sh "Argument1" "Argument2"(с кавычками внутри имени файла), а не сценарий Test_XML.sh, в который передаются аргументы "Argument1" и "Argument2".

Если удалить кавычки, заменив $("${VAR_Command}") на $(${VAR_Command}), ваш код будет работать как положено.

...