繁体   English   中英

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

[英]How can I extract the OS version of a remote VM and set it as an environment variable on the remote VM and also to use further in the expect script?

我试图获取远程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""

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

这里有几个问题。 首先,回想一下, 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 '.$'`"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM