如何提取远程VM的操作系统版本并将其设置为远程VM上的环境变量,还可以在expect脚本中进一步使用?

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

我试图获取远程VM的OS版本并将其作为环境变量添加到同一个vm上,并且还在执行expect脚本的主机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""

值被设置到远程虚拟机上的变量中,我应该能够在期望脚本中使用它。

bash shell expect rhel
1个回答
0
投票

这里有几个问题。首先,回想一下expect使用与sh相同的语法来表达变量。也就是说,如果我在expect脚本中设置变量:

set somevar "somevalue"

我可以通过运行打印出来:

puts "$somevar"

这意味着当你有这样的命令时......

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"

这会将预期的命令发送到你的shell。


我怀疑可能存在第二个问题:您将变量vers设置为以下输出:

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

目前尚不清楚为什么你最后有echo $vers。由于在运行此命令时未设置$vers,因此它只是在输出中添加一个空行。我相信你想简单地说:

send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$'`"
© www.soinside.com 2019 - 2024. All rights reserved.