【问题标题】:How to save commands output into a variable via ssh in bash如何在bash中通过ssh将命令输出保存到变量中
【发布时间】:2018-03-20 17:18:11
【问题描述】:

我想将管道命令序列的输出保存到远程服务器上的变量中。我正在尝试通过 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 是我脚本中的一个变量,其中包含一个数字。

我尝试了不同的语法,例如:“$( )”来捕获输出,但它仍然不起作用。

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • 问题是 100% 的主题。大多数 bash 问题都很好。那些不是纯粹的交互式问题,例如“如何更改我的键绑定?”或“如何为提示着色?”

标签: linux bash shell ssh scripting


【解决方案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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 2011-12-31
    • 2012-04-03
    • 1970-01-01
    • 2015-06-08
    • 2010-12-24
    • 2012-03-02
    • 2014-10-21
    相关资源
    最近更新 更多