debian安装程序上的Bash脚本在预设时不接受用户输入



我有一个非常小的脚本,需要在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

最新更新