用于在远程服务器上执行命令的bash脚本正在打印输出两次

时间:2017-10-21 21:06:03

标签: linux bash shell

我的输入文件如下所示

文件名:/ etc / hosts

10.142.75.6 m1 

10.142.75.7 m2 

10.142.75.8 m3

下面的脚本在/ etc / hosts中查找主机名,并且应该打印命令" nproc"的输出,但它打印输出两次,一次用于ip及其相应的主机名

for hosts in $(cat /etc/hosts) ;
do
     ssh $hosts "uname -a"
done

2 个答案:

答案 0 :(得分:2)

目前,您正在将文件中的每个单词解析为主机名 - 因此您首先通过其IP连接到每个主机,然后再通过其名称连接到每个主机。

最好使用BashFAQ #1最佳做法来阅读文件:

ip

在这里,我们将第一列放入shell变量name,将第二列(如果有的话)放入_,将所有后续列放入变量https://

答案 1 :(得分:0)

您可以使用cut仅读取文件的第一列:

for hosts in $(cut -d' ' -f1 < /etc/hosts);
do
    echo "jps for $hosts"
    ssh $hosts "uname -a"
done