[英]Shell script to login to remote VM and run commands from remote VM
[英]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.