远程执行 - 同一行中的2个命令输出

时间:2015-10-27 19:18:40

标签: bash shell

shell#printf“hostname rpm -qa | grep rhncfg-actions \ n”      usmnxbox01 rhncfg-actions-5.10.85-1.el6.noarch

我正在尝试使用以下命令从多个主机使用ssh获取上述输出。

for i in `cat ahosts`; do ssh -t $i "printf "`hostname` `rpm -qa | grep rhncfg-actions`\n"" 2>/dev/null;done

但是我在运行此命令时获得了系统的主机名。

1 个答案:

答案 0 :(得分:1)

您需要将命令替换放在单引号中,以防止在发送到远程主机之前对它们进行本地评估。您的代码还有其他几个问题:

  1. 使用for循环迭代文件
  2. printf的格式字符串参数中使用命令替换(如果任何替换包含百分号,则会导致问题)。
  3. 请改用:

    while IFS= read -r i; do
        ssh -t "$i" 'printf "%s %s\n" "$(hostname)" "$(rpm -qa | grep rhncfg-actions)"' < /dev/null
    done < ahosts
    

    这会从ssh重定向/dev/null的标准输入,以便ssh不会错误地使用针对read命令的输入。