这就是我想要做的事情:
fromServer=$(ssh -A first.com ssh second.com rpm -qa | grep exampleString)
echo $fromServer
echo不会打印任何内容。如果我首先手动shh然后ssh到秒,然后运行命令我得到输出:
ssh first.com
ssh second.com
rpm -qa | grep exampleString
如何将这三个步骤合并为一行并将输出存储到变量中?
答案 0 :(得分:1)
使用正确的引用或转义:
fromServer=$(ssh -A first.com 'ssh second.com rpm -qa | grep exampleString')
echo $fromServer
或
fromServer=$(ssh -A first.com ssh second.com rpm -qa \| grep exampleString)
echo $fromServer
% VAR=$(ssh -C user@server ls -la \| grep vim)
% echo $VAR
-rw------- 1 user user 15153 Mar 22 13:45 .vimrc
编辑:oooooooh,鬼鬼祟祟,我没有看到你在做什么两个 SSH☺
那么你需要更多的引用,因为你不希望你的管道被first.com
解释。以下是解决这个问题的三种方法:
fromServer=$(ssh -A first.com ssh second.com rpm -qa \\\| grep exampleString)
fromServer=$(ssh -A first.com 'ssh second.com rpm -qa \| grep exampleString')
fromServer=$("ssh -A first.com 'ssh second.com rpm -qa | grep exampleString'")
您要执行的是:
user@second % rpm -qa | grep exampleString
<{1>}服务器上的,因此您必须转义管道,以便second.com
服务器不解释它:
first.com
但是再一次,您需要在user@first % ssh second.com rpm -qa \| grep exampleString
or
user@first % ssh second.com 'rpm -qa | grep exampleString'
上从本地工作站执行该操作,因为您仍然不希望看到管道解释,您需要添加第二层转义/引用:
first.com
然后,一旦你确定你得到一个输出,你可以将整个命令的输出放在一个变量中:
user@workstation % ssh first.com "ssh second.com 'rpm -qa | grep exampleString'"
or
user@workstation % ssh first.com 'ssh second.com rpm -qa \| grep exampleString'
HTH