Как я могу использовать переменную в условии if в сценарии ожидаемого? - PullRequest
1 голос
/ 26 апреля 2019

Я выполняю сценарий ожидаемого на удаленном хосте (скажем, A) и хочу извлечь некоторые переменные окружения с этого удаленного хоста (A). В зависимости от переменных среды удаленного хоста (A), я хотел бы выполнить некоторые условные операции на этом хосте (A) и хосте (B), с которого запускается ожидаемый скрипт.

Я мог бы получить удаленные переменные и установить значения в удаленных переменных. Я не смог выполнить условие if, так как, возможно, у меня возникли проблемы с определением правильного синтаксиса / формата.

Пробовал некоторые из ссылок Google, но не смог приблизиться к рабочему решению.

send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$'`\r"
send "echo \$vers\r"
expect -re $prompt
send "`if [[ \$vers -lt 7 ]]; then echo 'RHEL Version is \$vers'; else echo 'RHEL Version is \$vers'; fi`\r"

Ошибка ниже:

invalid command name "$vers"
    while executing
"\$vers -lt 7 "
    invoked from within
"[ \$vers -lt 7 ]"
    invoked from within
"send "`if [[ \$vers -lt 7 ]]; then echo 'RHEL Version is \$vers'; else echo 'RHEL Version is \$vers'; fi`\r""

Требуется, чтобы ожидаемый скрипт правильно выполнял условие "if" и передавал значение удаленному хосту и моему локальному.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Вы можете следить за всем, что предложил @ glenn-jackman. Также следите за одинарными кавычками. Вы можете заменить их на двойные кавычки, если вы используете bash. проверьте это: http://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html также.

0 голосов
/ 26 апреля 2019

Ожидается, что это расширение , и Tcl использует квадратные скобки так же, как оболочка использует обратные метки: подстановка команд. Вам нужно экранировать скобки в вашей строке в двойных кавычках:

send "if \[\[ \$vers -lt 7 \]\]; then echo 'RHEL Version is \$vers'; else echo 'RHEL Version is \$vers'; fi\r"

Или, избегайте обратной косой черты, используя не интерполирующий механизм цитирования Tcl:

send {if [[ $vers -lt 7 ]]; then echo 'RHEL Version is $vers'; else echo 'RHEL Version is $vers'; fi}
send "\r"

Фигурные скобки в Tcl похожи на одинарные кавычки оболочек.

Обратите внимание, что я убрал галочки в команде.

Полный синтаксис для языка Tcl описан здесь - всего 12 правил. Эти вопросы и ответы включают в себя правила 4, 6 и 7, а по касательной 8 и 9.

...