Здесь есть пара проблем.Во-первых, напомним, что 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 '.$'`"