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
但是我在运行此命令时获得了系统的主机名。
答案 0 :(得分:1)
您需要将命令替换放在单引号中,以防止在发送到远程主机之前对它们进行本地评估。您的代码还有其他几个问题:
for
循环迭代文件printf
的格式字符串参数中使用命令替换(如果任何替换包含百分号,则会导致问题)。请改用:
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
命令的输入。