我有一个非常小的脚本,需要在debian安装程序上运行: (通过预置,预安装脚本)
echo -n -e " # Your option [1] [2] [3]: "
read REPLY
if [ "$REPLY" == "1" ]
脚本在这里停止,我按下的任何内容都只显示在屏幕上,但它不接受回车键。通常,当您按1并按Enter键时,读取应返回1到$ REPLY。但没有任何反应。它不断接受用户输入,但不会发生进一步的操作。
然后,我用ALT + F2切换到tty2并在那里运行脚本,没关系,当我按下时它按预期工作;需要输入。为什么tty1不接受像往常一样进入?
答案 0 :(得分:4)
使用debconf进行此类配置,它可以完全满足您的需求。
模板文件(debian/templates
):
Template: your_package/select_option
Type: select
Choices: 1, 2, 3
Description: Which option?
Choose one of the options
脚本(debian/config
):
#!/bin/sh -e
# Source debconf library.
. /usr/share/debconf/confmodule
db_input medium your_package/select_option || true
db_go
# Check their answer.
db_get your_package/select_option
if [ "$RET" = "1" ]; then
# Do stuff
fi
答案 1 :(得分:1)
在嵌入式Linux上遇到与busybox相同的问题(读取未处理我的输入) 花了我一些时间才意识到busybox的读取不是CR容忍的 - 我的终端程序(使用miniterm.py)默认发送CR / LF行结束;把它切换到LF只解决了我的问题!
答案 2 :(得分:0)
使用bash解释器,尝试替换read by:
内置阅读
使用其他sh解释器,指定变量名称:
阅读REPLY
答案 3 :(得分:0)
以下脚本适用于我:
#!/bin/sh
echo -n -e " # Your option [1] [2] [3]: "
read
case $REPLY in
1 )
echo "one" ;;
2 )
echo "two" ;;
3 )
echo "three" ;;
*)
echo "invalid" ;;
esac
如果选择 1 ,它会很好地打印one
。您有什么理由坚持if
... fi
?