如何在bash

时间:2017-10-09 13:15:39

标签: linux bash shell ssh scripting

我想将一个管道序列的输出保存到远程服务器上的变量中。我试图通过ssh这样做:

ssh $host "kernel_ver=`sudo yum list kernel --showduplicates | grep 7.$os_rel | tr -s " " | cut -d" " -f2 | head -n1`; echo $kernel_ver"

我收到了这个错误:

Error: No matching Packages to list
ssh: Could not resolve hostname kernel_ver= ; echo : Name or service not known

$ os_rel是我脚本中包含数字的变量。

我尝试了不同的语法:" $()"捕获输出,它仍然无法正常工作。

1 个答案:

答案 0 :(得分:1)

如果你使用双引号来包围所有内容,那么反引号将由本地shell而不是远程shell进行评估。变量引用$kernel_ver也是如此。使用单引号禁用两者。

ssh $host 'kernel_ver=`sudo yum list kernel --showduplicates | grep 7.$os_rel | tr -s " " | cut -d" " -f2 | head -n1`; echo $kernel_ver'

如果$os_rel是您 希望展开的本地变量,那么您需要暂时保留单引号。

ssh $host 'kernel_ver=`sudo yum list kernel --showduplicates | grep 7.'"$os_rel"' | tr -s " " | cut -d" " -f2 | head -n1`; echo $kernel_ver'