Как извлечь версию ОС удаленной виртуальной машины и установить ее в качестве переменной среды на удаленной виртуальной машине, а также использовать ее в сценарии ожидаемого обновления? - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь получить версию ОС удаленной виртуальной машины и добавить ее в качестве переменной среды на том же виртуальном компьютере, а также использовать полученное значение на хосте VM, с которого выполняется ожидаемый сценарий.

Я пытаюсь экспортировать значение извлеченного значения. Но переменная не устанавливается.

send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo $vers`\r"
expect -re $prompt

Я вижу ниже вопрос:

 can't read "vers": no such variable
    while executing
"send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo $vers`\r""

Значение установлено в переменной на удаленном виртуальном компьютере, и я должен иметь возможность использовать его в сценарии ожидаемого.

1 Ответ

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

Здесь есть пара проблем.Во-первых, напомним, что expect использует тот же синтаксис, что и sh для выражения переменной.То есть, если я устанавливаю переменную в сценарии expect:

set somevar "somevalue"

, я могу распечатать ее, выполнив:

puts "$somevar"

Это означает, что когда у вас есть такая командаthis ...

send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo $vers`\r"

... затем ожидайте попытается развернуть переменную $vers перед отправкой этого текста в связанный процесс.Ошибка, которую вы видите, исходит от expect;мы можем воспроизвести его следующим образом:

expect1.7> puts "$var_that_does_not_exist"
can't read "var_that_does_not_exist": no such variable

Вам нужно будет экранировать $ в вашей строке, например:

send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo \$vers`\r"

Это отправит нужную команду в вашу оболочку.


Я подозреваю, что может быть вторая проблема: вы устанавливаете переменную vers для вывода:

rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo $vers

Не понятно, почему выу меня это echo $vers в конце.Поскольку $vers не устанавливается при запуске этой команды, она просто добавит пустую строку в вывод.Я полагаю, вы хотите просто:

send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$'`"
...