我正在尝试创建一个脚本来 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"