使用whiptail 的清单 - 为什么我无法运行多个命令?

使用whiptail 的清单 - 为什么我无法运行多个命令?

由于函数下面的行,此代码将仅在第一个匹配时运行:服务 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

在您的代码中,stdin来自 file 的值results同时被赋予 towhile read ...和 to ssh(在s1,s2和 中s3)。将吃掉第一个循环中ssh未读取的任何内容。read

尝试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.

相关内容