ホイップテールまたはダイアログ


15

ユーザー入力を使用するスクリプトを作成するため、ホイップテールを使用することにしましたが、ポータブルでubuntu 10.x以上およびCentOs5.x以上で動作するものを少し混乱させます。

私は知ってreadいますが、ツールのようなダイアログが欲しいので、誰かが他の選択肢を知っているなら、私に知らせてください。


whiptailぼったくりdialogじゃなかった?
sjas

回答:


12

whiptailほとんどのdebベースのシステムにdialogはデフォルトでインストールされますが、インストールされません。

Afairは、rpmベースwhiptailでもデフォルトのダイアログアプリです。

あなたにとって重要だと思います。

だから、whiptail移植性の点から正しい選択です。

また、whiptailに基づいているnewt一方で、dialogに基づいていますncurses。私の観点から、最初のものはより美しいです(:


追加情報を知っておくとよい:)
ラーフルパティル

2
このスクリプトは、多かれ少なかれポータブルかもしれませんが、ダイアログプログラム自体がです:whiptailよりも少ないポータブルではありません。
トーマスディッキー

8

両方を使用しない理由:

(bash 4が必要です)

#!/usr/bin/env bash
t(){ type "$1"&>/dev/null;}
function Menu.Show {
   local DIA DIA_ESC; while :; do
      t whiptail && DIA=whiptail && break
      t dialog && DIA=dialog && DIA_ESC=-- && break
      exec date +s"No dialog program found"
   done; declare -A o="$1"; shift
   $DIA --backtitle "${o[backtitle]}" --title "${o[title]}" \
      --menu "${o[question]}" 0 0 0 $DIA_ESC "$@"; }



Menu.Show '([backtitle]="Backtitle"
            [title]="Title"
            [question]="Please choose:")'          \
                                                   \
            "Option A"  "Stuff...."                \
            "Option B"  "Stuff...."                \
            "Option C"  "Stuff...."    

1
とても複雑です。次のようなものはどうでしょうかwhich whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog"。それからopは単に `$ window --title foo --msgbox bar 87 5`を実行できます。
ジェームズM.レイ

6

(これは必ずしも答えではありませんが、コードの量が多いため投稿しましたwhiptail。実際の経験はありません。whiptailユーザーがテスト済みのソリューションを投稿した場合、これを後で削除します。)

通りのBashシェルスクリプト/です:whiptailは書いています:

そのREADMEから:whiptailはdialog(1)とドロップイン互換になるように設計されていますが、機能はより少なくなっています:tailbox、timebox、calendarboxなど、一部のダイアログボックスは実装されていません。

つまり、必ずしもどちらかを決定する必要はありません。どれが利用可能かを検出し、スクリプトに使用させます:

# check whether whiptail or dialog is installed
# (choosing the first command found)
read dialog <<< "$(which whiptail dialog 2> /dev/null)"

# exit if none found
[[ "$dialog" ]] || {
  echo 'neither whiptail nor dialog found' >&2
  exit 1
}

# just use whichever was found
"$dialog" --msgbox "Message displayed with $dialog" 0 0

(はい、名前に改行文字が含まれるディレクトリ内にインストールされたツールでは、上記の検出は失敗します。単純にしました。)


5

dialog(1)マニュアルページ互換性セクションによると:

その後、ホイップテールがあります。実際的な目的のために、Debianによって保守されています(上流の開発者によって行われる作業はほとんどありません)。そのドキュメント(README.whiptail)の主張

whiptail(1)は、ダイアログ(1)の軽量な代替品であり、シェルスクリプト用のダイアログボックスを提供します。ncursesライブラリではなく、newtウィンドウライブラリ上に構築されているため、インストーラー、レスキューディスクなどの組み込み環境で小さくすることができます。

whiptailは、ダイアログとドロップイン互換になるように設計されていますが、機能が少なくなります:テールボックス、タイムボックス、カレンダーボックスなど、一部のダイアログボックスは実装されていません。

実際のサイズの比較(Debianテスト、2007/1/10):whiptail、newt、popt、およびslangライブラリのサイズの合計は757 KBです。ダイアログの同等の数 (ncursesをカウント)は520 KBです。最初の段落は無視してください。

* whiptail **は、ゲージボックスなどのdialogの一般的なオプションに対しても機能しないため、2番目の段落は誤解を招きます。 whiptail は 、元の1990年代半ばのdialog 0.4プログラムよりもdialogとの互換性が低くなり ます。

whiptailのマンページは、たとえばdialogから機能を借用しています が、奇妙なことに、最大0.4(1994)までのダイアログバージョンのみをソースとして引用しています。つまり、そのマンページは、dialogのより新しいバージョンから借用した機能を参照しています。

  • -ゲージ(0.5から)

  • --passwordbox(1999年のDebianの変更による)、

  • --default-itemダイアログ 2000/02/22 から)、

  • --output-fdダイアログ 2002/08/14 から)。

ややユーモラスなことに、「-」をエスケープとして使用するポップ機能(マンページには記載されていません)は、whiptailのマンページで言及される約1年前にdialogのマンページに記載されていました。 whiptailのマンページでは、getoptの属性が間違っています(とにかく不正確です)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.