首页 > 解决方案 > Linux Bash Scripting 执行 SSH 远程命令

问题描述

通过 ssh 从 linux shell 脚本远程运行命令,我遇到了一个奇怪的问题,对此没有解决方案!

这些命令是:

rpm -qa | grep bzd* | sort
rpm -qa | grep bzd-eet
rpm -qa | grep bzd-five

如果我在远程机器上的 shell 提示符下使用它们,所有这些命令都运行良好。如果这些命令从文本文件加载到数组中,它仍然可以工作:

while read line
do
   commands+=("$line")
done < commands.txt

ssh root@server "${commands[0]}"   
ssh root@server "${commands[1]}"
ssh root@server "${commands[2]}"

echo ${commands[0]} output -->rpm -qa | grep bzd* | sort       
echo ${commands[1]} output -->rpm -qa | grep bzd-eet 
echo ${commands[2]} output -->rpm -qa | grep bzd-five  

--> ssh 命令提供正确的包,在这种情况下应该可以在远程机器上找到。

问题:

如果我将这些命令的输出存储在一个变量中,它就不再工作了!!!

例子:

results=$(ssh root@server "${commands[0]}")
echo "${results[@]} --> output: nothing

results=$(ssh root@server "${commands[1]}")
echo "${results[@]} --> output: nothing  

results=$(ssh root@server "${commands[2]}")
echo "${results[@]} --> output: nothing                    

results=$(ssh root@server rpm -qa | grep bzd* | sort)
echo "${results[@]} --> output: correct output!!!!!!

这里发生了什么?似乎从任何类型的数组加载的命令都没有在 ssh 连接中正确执行。我能做些什么?

标签: linuxbashssh

解决方案


推荐阅读