web-dev-qa-db-ja.com

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

ユーザー入力を使用するスクリプトを作成するので、whiptailを使用することにしましたが、移植可能でubuntu 10.x以降およびCentOs5.x以降で機能するスクリプトを少し混乱させます。

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

16
Rahul Patil

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

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

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

したがって、移植性の観点からはwhiptailが正しい選択です。

また、whiptailnewtに基づいており、dialogncursesに基づいています。私の観点から、最初の方がより美しいです(:

14
rush

なぜ両方を使用しないのですか?

(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...."    
9
Orwellophile

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

As Bash Shell Scripting/Whiptail の書き込み:

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

つまり、どちらか一方を決める必要はありません。どれが利用可能かを検出し、スクリプトにそれを使用させるだけです。

# 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

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

7
manatwork

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

次にwhiptailがあります。実用的な目的のために、Debianによって保守されています(上流の開発者が行う作業はほとんどありません)。そのドキュメント(README.whiptail)の主張

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

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

実際のサイズの比較(Debianテスト、2007/1/10):whiptail、newt、poptおよびslangライブラリのサイズの合計は757 KBです。 dialog(ncursesを数える)の比較可能な数値は520 KBです。最初の段落は無視してください。

* whiptail **もゲージボックスなどのdialogの一般的なオプションでは機能しないため、2番目の段落は誤解を招く可能性があります。 whiptaildialogとの互換性が1990年代中頃のダイアログ0.4よりも低いプログラム。

whiptailのマンページはdialogから機能を借用します。ソースとしてのみdialogバージョン0.4(1994)まで。つまり、そのマンページは、dialogの最新バージョンから借用された機能を参照しています。たとえば、

  • -gauge(0.5から)

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

  • -default-item(fromdialog2000/02/22) 、

  • -output-fddialog2002/08/14から) 。

ややユーモラスに、エスケープとして「-」を使用するpopt機能(そのマンページには文書化されていません)がdialogのマンページは、whiptailのマンページで言及される前の約1年です。 whiptailのマンページは、getoptに誤って属性を付けています(そして、とにかく不正確です) )。

6
Buo-Ren Lin