debian安装程序上的Bash脚本不接受用于预置的用户输入

时间:2012-07-30 09:06:24

标签: linux bash debian sh

我有一个非常小的脚本,需要在debian安装程序上运行: (通过预置,预安装脚本)

echo -n -e " # Your option [1] [2] [3]: "
    read REPLY
    if [ "$REPLY" == "1" ] 

脚本在这里停止,我按下的任何内容都只显示在屏幕上,但它不接受回车键。通常,当您按1并按Enter键时,读取应返回1到$ REPLY。但没有任何反应。它不断接受用户输入,但不会发生进一步的操作。

然后,我用ALT + F2切换到tty2并在那里运行脚本,没关系,当我按下时它按预期工作;需要输入。为什么tty1不接受像往常一样进入?

4 个答案:

答案 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