我有一个非常小的脚本,需要在debian安装程序上运行:(通过预先设置、预安装脚本)
echo -n -e " # Your option [1] [2] [3]: "
read REPLY
if [ "$REPLY" == "1" ]
脚本在这里停止,我按下的任何键都会显示在屏幕上,但它不接受回车键。通常,当您按1并按enter时,读数应返回1至$REPLY。但什么也没发生。它一直接受用户输入,但没有发生进一步的操作。
然后,我用ALT+F2切换到tty2,并在那里运行脚本,它很好,正如预期的那样,当我按下时;它接受输入。为什么tty1没有像往常一样接受输入?
使用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
在嵌入式Linux上使用busybox时也遇到了同样的问题(读取未处理我的输入)
我花了一些时间才意识到busybox的读取是不允许CR的——我的终端程序(使用miniterm.py)发送的CR/LF行默认结束;切换到LF只解决了我的问题!
使用bash解释器,尝试将read替换为:
内置读取
使用其他sh解释器,指定变量名:
读取应答
以下脚本对我来说很好:
#!/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
?