回答:
whiptail
ほとんどのdebベースのシステムにdialog
はデフォルトでインストールされますが、インストールされません。
Afairは、rpmベースwhiptail
でもデフォルトのダイアログアプリです。
あなたにとって重要だと思います。
だから、whiptail
移植性の点から正しい選択です。
また、whiptail
に基づいているnewt
一方で、dialog
に基づいていますncurses
。私の観点から、最初のものはより美しいです(:
両方を使用しない理由:
(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...."
which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog"
。それからopは単に `$ window --title foo --msgbox bar 87 5`を実行できます。
(これは必ずしも答えではありませんが、コードの量が多いため投稿しました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
(はい、名前に改行文字が含まれるディレクトリ内にインストールされたツールでは、上記の検出は失敗します。単純にしました。)
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の属性が間違っています(とにかく不正確です)。
whiptail
ぼったくりdialog
じゃなかった?