![远程 ssh 命令不从 AIX 上的 ksh 脚本发送 echo 变量](https://linux22.com/image/60343/%E8%BF%9C%E7%A8%8B%20ssh%20%E5%91%BD%E4%BB%A4%E4%B8%8D%E4%BB%8E%20AIX%20%E4%B8%8A%E7%9A%84%20ksh%20%E8%84%9A%E6%9C%AC%E5%8F%91%E9%80%81%20echo%20%E5%8F%98%E9%87%8F.png)
我需要使用 SSH 从脚本中的远程主机获取变量的值,并且必须首先获取一个环境文件,该文件在运行结束时进行转换。
该命令在本地运行,我可以看到它在使用echo
.我花了一天的时间来研究这个问题并测试了我能找到的每一种单引号和双引号的组合。我希望有人能快速解决。
第一个 SSH 命令返回“YES”,这正是我所期望的。如何在不扩展第二个变量的情况下将其获取到远程主机?
这是脚本:
#!/bin/ksh
set -x
SIDHost=p16
ThisSID=test
ssh -q $SIDHost ". /tmp/useq $ThisSID; echo \$HOST_IS_ERPDB"
ERPTest=`ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB"`
脚本运行:
+ SIDHost=p16
+ ThisSID=test
+ ssh -q p16 . /usr/vmmc/bin/oracle_scripts/useq test; echo $HOST_IS_ERPDB
YES
+ + ssh -q p16 . /usr/vmmc/bin/oracle_scripts/useq test; echo NO
ERPTest=NO
答案1
在反引号内,反斜杠引用下一个字符。所以你会得到命令的输出
ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo $HOST_IS_ERPDB"
你需要\\
:
ERPTest=`ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \\$HOST_IS_ERPDB"`
所以它ERPTest
被设置为命令的输出
ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB"
或者,使用$(…)
代替过时的`…`
.请注意,在某些版本的 AIX 上,您可能需要使用/bin/sh
或ksh93
来代替古董/bin/ksh
.
ERPTest=$(ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB")