5

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

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

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

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

4

4 回答 4

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
于 2012-08-02T18:44:09.290 回答
2

在嵌入式 Linux 上,busybox 有同样的问题(读取不处理我的输入)。
我花了一些时间才意识到busybox 的读取不是CR 容忍的——我的终端程序(使用miniterm.py)默认发送CR/LF 行结束;将其切换到 LF 只解决了我的问题!

于 2013-07-23T11:49:06.753 回答
0

使用 bash 解释器,尝试将 read 替换为:

内置读取

使用其他 sh 解释器,指定变量名:

阅读回复

于 2012-07-30T09:27:55.460 回答
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

one如果我选择它会很好地打印出来1。你有什么理由坚持if... fi

于 2012-08-02T13:59:53.063 回答