Lista de verificação usando o whiptail - Por que não consigo executar vários comandos?

1

Este código será executado apenas para a primeira correspondência por causa das linhas sob funções: serviço httpd start mas exibirá echo de todas as funções se eu remover todas as linhas ssh ... Alguém poderia me explicar o que está acontecendo e talvez alguma solução como eu posso usá-lo.

#!/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
    
por Shimpu 02.08.2017 / 17:51

1 resposta

1

No seu código, stdin proveniente do arquivo results é atribuído a while read ... e a ssh (em s1 , s2 e s3 ). ssh irá comer o que não foi lido por read no primeiro loop.

Tente salvar stdin antes do loop para uso posterior com ssh:

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

Ou use < /dev/null se você não precisar de stdin em ssh .

    
por 02.08.2017 / 18:06

Tags