for 루프가 있습니다.
for host in $(cat ./hosts)
do
echo -e "$host"
ssh -o "StrictHostKeyChecking no" $host "uptime" 2>/dev/null
echo -e "\n"
done
위의 for 루프와 정확히 동일한 작업을 수행하는 while 루프입니다.
while read host
do
echo -e "$host"
ssh -o "StrictHostKeyChecking no" $host "uptime" 2>/dev/null
echo -e "\n"
done <./hosts
Hosts는 for 및 while 루프를 포함하는 스크립트와 동일한 위치에 있는 파일이며 원격 서버의 일부 호스트 이름을 포함합니다. for 루프는 (호스트 파일에 나열된 모든 호스트에 대해) 예상 결과를 인쇄하지만 while 루프의 경우 첫 번째 호스트만 인쇄 uptime
하고 종료합니다!
호스트 파일에는 한 줄에 하나의 호스트 이름이 포함됩니다.
문제는 왜 이 두 루프가 다르게 동작하는가입니다.
답변1
문제는 ssh가 표준 입력에서 읽기 때문에 나머지 줄을 모두 먹는다는 것입니다. 표준 입력은 어디에서나 연결할 수 있습니다.
$ ssh -o "StrictHostKeyChecking no" $host "uptime" 2>/dev/null < /dev/null