【发布时间】:2019-04-26 13:38:36
【问题描述】:
我正在远程主机(比如 A)上执行期望脚本,我想从该远程主机(A)获取一些环境变量。根据远程主机(A)的环境变量,我想对该主机(A)和运行期望脚本的主机(B)执行一些条件操作。
我可以获取远程变量并在远程变量中设置值。我无法执行 if 条件,因为我可能无法确定正确的语法/格式。
从 google 参考资料中尝试了一些,但无法真正接近可行的解决方案。
send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$'`\r"
send "echo \$vers\r"
expect -re $prompt
send "`if [[ \$vers -lt 7 ]]; then echo 'RHEL Version is \$vers'; else echo 'RHEL Version is \$vers'; fi`\r"
出现以下错误:
invalid command name "$vers"
while executing
"\$vers -lt 7 "
invoked from within
"[ \$vers -lt 7 ]"
invoked from within
"send "`if [[ \$vers -lt 7 ]]; then echo 'RHEL Version is \$vers'; else echo 'RHEL Version is \$vers'; fi`\r""
需要期望脚本正确执行“if”条件并将值传递给远程主机和我的本地。
【问题讨论】:
-
你为什么在这里使用
expect,而不是在SSH的标准输入上作为heredoc发送代码? -
顺便说一句,
export仅在您想让子进程可以访问变量时才需要。如果您只想从同一个 shell 实例访问该变量,最好将其保留为常规 shell 变量,而不是使用export使其成为环境变量——环境变量计入最大命令行长度,因此您在进程开始失败之前只能有这么多/这么大。 (当然,在现代系统上,限制至少在数百 KB,但仍然没有理由一开始就将其计入其中)。