コマンド置換式で実行すると、「ダイアログ」がメニューを表示しませんが、許可が許可されるのはなぜですか?

コマンド置換式で実行すると、「ダイアログ」がメニューを表示しませんが、許可が許可されるのはなぜですか?

bashシェルスクリプトを介してユーザーにオプションメニューを提供したいと思います。その後、後で使用できるように、選択項目を環境変数に保存する必要があります。

コマンドラインから実行する場合:

dialog \
    --backtitle "Make a choice" \
    --menu "Take a pick" \
    10 40 3 \
    choice1 "First choice" \
    choice2 "Second choice"

その後、すべてがうまく動作します。目的のメニューを取得choice1またはchoice2再印刷します。しかし、以下を実行すると:

SELECTION=$( dialog \
    --backtitle "Make a choice" \
    --menu "Take a pick" \
    10 40 3 \
    choice1 "First choice" \
    choice2 "Second choice" \
)

その後、私は望むように動作しなくなります。

  • メニューは表示されませんが(私が知っている限り)dialogEnterキーを押すと終了します。
  • Enterキーを押して非表示メニューを終了すると、選択したラベルは$ SELECTIONに保存されず、端末に表示されます。

2>&1stderrで印刷される場合に備えて、stderrをstdoutにリダイレクトする機能を追加してみました。今唯一確実な影響は何もないコマンド置換式から返されるまたは端末に印刷します。

私のシステムでは1.1-20120215dialogですcdialog。マニュアルdialogページには--menuこれが記載されています。終了すると、選択したメニュー項目のラベルがダイアログボックスの出力に印刷されます。これは上記のようなものとうまくいくはずですが、私にとってはうまくいきません。

私の考えではユーザーが利用可能なオプションから選択できるように表示されるメニュー。ユーザーが受け入れると、選択したオプション(たとえばchoice2)のラベルが環境変数$ SELECTIONに保存されます。ユーザーがキャンセルした場合は明確なマークが必要です(理想的には$ SELECTIONは未定義または長さ0の文字列です)。

どうすればいいですか?私が逃しているパズルのピースは何ですか?

dialog選択できる素晴らしいメニューを提供し、理想的には、提案されたソフトウェアがあまりにもエキゾチックでない限り、代替策を提案するソリューションも許可されています(mainDebian Stableリポジトリで可用性が必要です)。

答え1

次の--stdoutオプションを試してください。

$ SELECTION=$( dialog --stdout \
    --backtitle "Make a choice" \
    --menu "Take a pick" \
    10 40 3 \
    choice1 "First choice" \
    choice2 "Second choice" \
)

関連情報