通过从Linux shell脚本通过ssh远程运行命令来解决这个问题,这是一个奇怪的问题!
这些命令是:
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连接中均未正确执行。我该怎么办?