我正努力让我的生活更容易在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
#?
答案 0 :(得分:1)
select
无法读取您的输入,因为输入已连接到文件$1
(最后一行的done < $1
)。或者实际上是阅读OEF或其他东西。
如果您需要与脚本进行交互,则需要将while
循环重写为不同的内容,例如
for srv in "localhost"
工作正常。