5

Debianインストーラーで実行する必要 がある非常に小さなスクリプトがあります:(プレシード、プレインストールスクリプトを介して)

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

スクリプトはここで停止し、何を押しても画面に表示されますが、Enter キーは受け付けません。通常、1 を押して Enter キーを押すと、読み取りによって $REPLY に 1 が返されます。しかし、何も起こりません。ユーザー入力を受け入れ続けますが、それ以上のアクションは発生しません。

次に、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 に答える
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を選択するときれいに印刷されます1if...にこだわりたい理由はありますfiか?

于 2012-08-02T13:59:53.063 に答える
0

bash インタープリターを使用して、読み取りを次のように置き換えてみてください。

組み込み読み取り

他のshインタープリターでは、変数名を指定します:

返信を読む

于 2012-07-30T09:27:55.460 に答える