0

read が端末から入力を取得していないのがおかしいかどうかはわかりません。

ソース コード作成プロセスで使用される構成スクリプトは、データベースのタイプを MYSQL または ORACLE から選択するための入力をユーザーに要求する必要があります (以下はコードです)。

MYSQLLIBPATH="/usr/lib/mysql"
echo "Enter DataBase-Type 1-ORACLE, 2-MySQL (default MySQL):"
read in
echo $? >> /tmp/error.log
if test -z "$in" -o "$in" = "2"
then
        DATABASE=-DDB_MYSQL
         if true; then 
  MYSQL_TRUE=
  MYSQL_FALSE='#'
else
  MYSQL_TRUE='#'
  MYSQL_FALSE=
fi

        echo "Enter Mysql Library Path: (eg: $MYSQLLIBPATH (default))"
        read in
        echo $? >> /tmp/error.log
        if test -n "$in"
        then 
                MYSQLLIBPATH=`echo $in`
        fi
        echo "Mysql Lib path is $MYSQLLIBPATH"
else
         if false; then
  MYSQL_TRUE=
  MYSQL_FALSE='#'
else
  MYSQL_TRUE='#'
  MYSQL_FALSE=
fi

        DATABASE=-DDB_ORACLE
        LD_PATH=
fi

ただし、読み取りコマンドはユーザー入力を求めていません。標準入力からの入力の取得に失敗しています。

When I checked the status of the command in the error.log it was showing
1
1

read が stdin からの入力を取得できない理由を誰か教えてください。入力の読み取りをブロックできる組み込み変数はありますか?

4

1 に答える 1

2

ほとんどの場合read、EOF に達したファイルからリダイレクトされた標準入力で実行されます。上記が構成コードの全体ではない場合は、入力リダイレクトがないことを確認してください。上記のコードは、パイプまたはファイルからの入力で呼び出された関数の一部でしょうか? それ以外の場合は、configure の実行方法を確認してください - リダイレクトはありますか?

それ以外の場合は、普遍的なアドバイスが適用されます。何が起こっているのかが明らかになるまで、コードを簡素化し、削除してみてください。

ところで、ディストリビューション用にプログラムをパッケージ化したい場合、 configure をインタラクティブにするのは得策ではありません - インタラクティブなプログラムの実行を制御するのは簡単ではありません。コマンド ライン オプションを使用してパラメーターを指定するためのサポートを追加することを検討してください。

于 2013-07-27T07:58:13.773 に答える