for 루프와 while 루프의 결과가 다른 이유는 무엇입니까? [복사]

for 루프와 while 루프의 결과가 다른 이유는 무엇입니까? [복사]

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

인용하다

관련 정보