휩테일을 사용한 체크리스트 - 여러 명령을 실행할 수 없는 이유는 무엇입니까?

휩테일을 사용한 체크리스트 - 여러 명령을 실행할 수 없는 이유는 무엇입니까?

이 코드는 함수 아래 줄로 인해 첫 번째 일치에서만 실행됩니다.서비스 httpd가 시작됩니다하지만 모든 ssh... 줄을 제거하면 모든 기능에 대한 에코가 표시됩니다. 누군가 나에게 무슨 일이 일어나고 있는지 설명해 줄 수 있고 어떻게 사용할 수 있는지에 대한 해결책이 있을 수도 있습니다.

#!/bin/bash
 function s1 {
        echo "running 1 "
        ssh user@server_1_IP service httpd start
}
    function s2 {
        echo "running 2"
        ssh user@server_2_IP service httpd start
} 
function s3 {
        echo "running 3"
        ssh user@server_3_IP service httpd start
}
whiptail --title "Test" --checklist --separate-output "Choose:" 20 78 15 \
"Server1" "" on \
"Server2" "" on \
"Server3" "" on 2>results

while read choice  
do
        case $choice in
                Server1) s1
                ;;
                Server2) s2
                ;;
                Server3) s3
                ;;
                *)
                ;;
        esac
done < results

답변1

코드에서 stdinfile의 값은 to 및 to (in , 및 ) results모두에 할당됩니다 . 첫 번째 루프에서 읽지 않은 내용은 모두 먹힙니다 .while read ...sshs1s2s3sshread

stdin나중에 SSH로 사용하기 위해 반복하기 전에 저장해 보세요 .

exec {stdin}<&0
while read choice  
do
        case $choice in
                Server1) s1 <&$stdin ;;
                Server2) s2 <&$stdin ;;
                Server3) s3 <&$stdin ;;
        esac
done < results

< /dev/null또는 stdin이 필요하지 않은 경우 ssh.

관련 정보