ユーザー入力を使用するスクリプトを作成する予定なのでwhiptail
。
しかし、今はどちらが移植可能で、Ubuntu 10.x以降とCentOS 5.x以降で実行できるかは少し混乱しています。
わかりましたread
。しかし、dialog
他の選択肢を知っている人がいれば教えてください。
答え1
whiptail
ほとんどの deb ベースのシステムにはデフォルトでインストールされますが、そうではありませんdialog
。
公平に言えば、rpmはデフォルトのwhiptail
ダイアログアプリケーションでもあります。
私はこれがあなたにとって重要だと思います。
移植性の面でもwhiptail
正しい選択です。
whiptail
に基盤を置いていると同時にnewt
にdialog
基盤を置いているncurses
。私の視点では、最初のものがより美しいです(:
答え2
~によるとマニュアルページの Dialog(1) 互換性セクション:
それではそこにいます。鞭の尾。実用的な目的のために Debian でメンテナンスします (アップストリーム開発者は最小限の作業を行います)。その文書(README.whiptail)の主張
鞭の尾(1) 軽い代替品です会話(1) シェルスクリプトのダイアログボックスを提供します。 ncursesライブラリではなくnewt windowライブラリに基づいて構築されているため、インストーラ、リカバリディスクなどの組み込み環境ではサイズが小さくなります。
Whittailはダイアログと直接互換性があるように設計されていますが、機能が少なくなります。 tailbox、timebox、Calendarboxなどの一部のダイアログボックスは実装されていません。
実際のサイズ比較(Debianテスト、2007/1/10):フルサイズ鞭の尾、newt、popt、およびslangライブラリは757KBです。比較可能な数値は 会話 (ncurses計算)は520KBです。最初の段落を無視してください。
*whiptail**は次の一般的なオプションでも機能しないため、2番目の段落は誤解を招く可能性があります。会話、楽器箱のような。 鞭の尾 あまり互換性がない 会話 1990年代半ばの元のDialog 0.4プログラムよりも優れています。
鞭の尾マンページは次の機能を借りています。 会話たとえば、奇妙なことに参照のみがあります。会話0.4(1994)より前のバージョンがソースとして使用されていました。つまり、そのマンページは、次のバージョンの最新バージョンを参照します。会話、例えば、
- 測定(0.5から)
--パスワードボックス(Debian 1999 の変更点),
- 基本プロジェクト(から会話2000年2月22日)、
--出力-fd(から会話2002/08/14).
ややユーモラスに気づくかもしれませんが、ポップトマンページに文書化されていないエスケープ文字として「--」を使用する機能は、次の文書に文書化されています。会話マンページは約1年前に言及されました。鞭の尾マンページ。 鞭の尾マニュアルページでは、次のように誤って説明しています。選択項目のインポート(ある意味では正確ではありません。)
答え3
(必ずしも答えではありませんが、コードの量が多いので、このように上げます。実際の経験はありません。ユーザーがここでテストしたソリューションを公開すると、後でwhiptail
削除されます。)whiptail
〜のようにBash シェルスクリプト/Whiptail書いた:
Readmeファイルで判断すると、hiptailはダイアログボックス(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
(はい、名前に改行文字を含むディレクトリにインストールされているツールについては、上記の検出が失敗します。簡単に説明します。)
答え4
両方を使用しない理由:
(バッシュ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...."