서버 목록에 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"
핑은 제대로 작동하지만 폴더를 생성하는 명령을 추가하면 첫 번째 서버 핑 결과만 나타나고 첫 번째 서버에 폴더가 생성됩니다.
어떤 아이디어가 있나요?
답변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"