Shell 脚本 - Ping 并从服务器列表创建文件夹

Shell 脚本 - Ping 并从服务器列表创建文件夹

我正在尝试创建一个脚本来 ping 服务器列表,它将结果写入一个文本文件,然后它将在服务器列表中创建一个文件夹。

FILENAME="hosts"

while IFS='' read -r LINE || [[ -n "$LINE" ]]; do    
ping -c 3 $LINE >>/home/user/scripts/results.txt
sshpass -p 'P@ssword' ssh$LINE 'cd/home/user/Desktop;mkdir test'
echo
done < "/home/user/scripts/servers.txt"

ping 工作正常,但在我添加创建文件夹的命令后,它只会有第一个服务器 ping 结果,并在第一台服务器上创建文件夹。

任何想法?

答案1

ssh读取标准输入。它继承了循环的标准输入while。这意味着它将吞噬文件中所有剩余的行。

通过使用ssh -n重定向/dev/null到 的标准输入可以轻松解决这个问题ssh

#!/bin/sh

while IFS= read -r addr || [ -n "$addr" ]; do    
    ping -c 3 "$addr" 
    sshpass -p 'P@ssword' ssh -n "$addr" 'mkdir Desktop/test'
    echo
done < "$HOME/scripts/servers.txt" >"$HOME/scripts/results.txt"

相关内容