bash select循环不等待输入

时间:2016-01-15 10:44:04

标签: bash loops select input ssh

我正努力让我的生活更容易在80多台机器上部署。然而,并非所有这些机器都运行相同版本的RHEL,并且需要在它们上运行的脚本存在细微差别。

这就是为什么我想首先获得发布版本,然后选择要在机器上部署的文件。

问题是选择循环不会等待我的输入,它会完全跳过它并继续前进。

这是我正在使用的代码

#!/bin/bash

version() {
    cat /etc/*-release | grep "release"
    select ver in "6" "7"
    do
        case $ver in
            6) echo "install for RH6"; break;;
            7) echo "install for RH7"; break;;
        esac
    done
}

while read srv
do
    ping -c 1 $srv
    ssh -n $srv "$(typeset -f); version"
done < $1

ping仅用于测试目的

这里是一些示例输出:

root@192.168.xxx.xxx's password:
Red Hat Enterprise Linux Server release 7.1 (Maipo)
Red Hat Enterprise Linux Server release 7.1 (Maipo)

1) 6
2) 7
#? 

1 个答案:

答案 0 :(得分:1)

select无法读取您的输入,因为输入已连接到文件$1(最后一行的done < $1)。或者实际上是阅读OEF或其他东西。

如果您需要与脚本进行交互,则需要将while循环重写为不同的内容,例如

for srv in "localhost"

工作正常。