GUI環境がなくても使える。
help
$ whiptail Box options: --msgbox <text> <height> <width> --yesno <text> <height> <width> --infobox <text> <height> <width> --inputbox <text> <height> <width> [init] --passwordbox <text> <height> <width> [init] --textbox <file> <height> <width> --menu <text> <height> <width> <listheight> [tag item] ... --checklist <text> <height> <width> <listheight> [tag item status]... --radiolist <text> <height> <width> <listheight> [tag item status]... --gauge <text> <height> <width> <percent> Options: (depend on box-option) --clear clear screen on exit --defaultno default no button --default-item <string> set default string --fb, --fullbuttons use full buttons --nocancel no cancel button --yes-button <text> set text of yes button --no-button <text> set text of no button --ok-button <text> set text of ok button --cancel-button <text> set text of cancel button --noitem don't display items --notags don't display tags --separate-output output one line at a time --output-fd <fd> output to fd, not stdout --title <title> display title --backtitle <backtitle> display backtitle --scrolltext force vertical scrollbars --topleft put window in top-left corner -h, --help print this message -v, --version print version information
表示系
--msgbox
whiptail --msgbox "メッセージです。\n\n複数行も表現できます。" 0 0
key | 説明 |
---|---|
Enter or Space |
了解 |
--yesno
whiptail --yesno "質問です。\n\n実行しますか?" 0 0
直後に$?
を参照すると選択した項目に応じた値が入る。
echo $?
選択肢 | $? |
---|---|
はい | 0 |
いいえ | 1 |
--infobox
TERM=vt100 whiptail --infobox "infoboxですが何か?\n\n標準出力では表示できませんが何か?\n複数行表示できませんが何か?" 0 0
これ何が嬉しいの?
--textbox
/tmp/work/a.txt
aaaaaa bbbbbbあ いいいいいいいいいい うううううううううううううう
whiptail --textbox /tmp/work/a.txt 0 0
全文表示されない……。サイズを大きめに指定すると全文表示された。
whiptail --textbox /tmp/work/a.txt 10 80
--gauge
seq -f'echo %g;sleep 0.1' 100 | bash | \ whiptail --gauge "進捗率ですよ。" 0 0 0
編集系
--inputbox [init]
whiptail --inputbox "名前を入力してください。" 0 0
入力値が標準出力として返ってくる。
変数に代入したいときは以下。
NAME=$(whiptail --inputbox "名前を入力してください。" 0 0 3>&1 1>&2 2>&3)
echo $NAME
3>&1 1>&2 2>&3
は標準出力と標準エラー出力を入れ替えている。
初期値を設定したいときは以下。
whiptail --inputbox "名前を入力してください。" 0 0 "山田太郎"
- 日本語入力もできる
--passwordbox [init]
whiptail --passwordbox "パスワードを入力してください。" 0 0
whiptail --passwordbox "パスワードを入力してください。" 0 0 "初期値"
<text>
を表示するには<height>
を7
以上にする必要がある。ひどい。
whiptail --passwordbox "パスワードを入力してください。" 7 0 "初期値"
<text>
が表示されない(英字にしても同様。<height>
を7
以上にすると表示された)初期値
だと******
になった(1文字2つの*
。BackSpace1回で2つの*
が消えた)
--menu [tag item] ...
whiptail --menu "メニューです。選べよ。" 0 0 0 0 "白米" 1 "ご飯" 2 "白飯" 3 "日の丸弁当" 4 "白にぎり飯"
key | 説明 |
---|---|
↑ ,↓ |
フォーカス遷移 |
Space |
チェック切替 |
Enter |
決定(了解 ) |
ESC |
キャンセル(取消 ) |
引数[tag item]
の書式は以下。
戻り値1 表示値1 戻り値2 表示値2 戻り値3 表示値3 ...
改行をいれると少しわかりやすい。
whiptail --menu "メニューです。選べよ。" 0 0 0 \ 0 "白米" \ 1 "ご飯" \ 2 "白飯" \ 3 "日の丸弁当" \ 4 "白にぎり飯"
選択した項目を変数に代入するなら以下。
selected=$(whiptail --menu "メニューです。選べよ。" 0 0 0 \ 0 "白米" \ 1 "ご飯" \ 2 "白飯" \ 3 "日の丸弁当" \ 4 "白にぎり飯" \ 3>&1 1>&2 2>&3)
echo $selected
--checklist [tag item status]...
whiptail --checklist "チェックリスト" 0 0 0 0 作業0 ON 1 作業1 OFF 2 作業2 ON
key | 説明 |
---|---|
↑ ,↓ |
フォーカス遷移 |
Space |
チェック切替 |
Enter |
決定(了解 ) |
ESC |
キャンセル(取消 ) |
了解
するとON
の項目のtag
が返される。
"0" "2"
スペース区切りで""
囲み。
改行でわかりやすくする。
whiptail --checklist "チェックリスト" 0 0 0 \ 0 作業0 ON \ 1 作業1 OFF \ 2 作業2 ON
戻り値を変数に代入する。
selected=$(whiptail --checklist "チェックリスト" 0 0 0 \ 0 作業0 ON \ 1 作業1 OFF \ 2 作業2 ON \ 3>&1 1>&2 2>&3)
echo $selected
--radiolist [tag item status]...
whiptail --radiolist "ラジオリスト" 0 0 0 0 選択肢0 ON 1 選択肢1 OFF 2 選択肢2 OFF
key | 説明 |
---|---|
↑ ,↓ |
フォーカス遷移 |
Space |
チェック切替 |
Enter |
決定(了解 ) |
ESC |
キャンセル(取消 ) |
了解
するとON
の項目のtag
が返される。""
で囲まれない。
0
戻り値を変数に代入する。
selected=$(whiptail --radiolist "ラジオリスト" 0 0 0 \ 0 選択肢0 ON \ 1 選択肢1 OFF \ 2 選択肢2 OFF \ 3>&1 1>&2 2>&3)
echo $selected
&&
でつなげてワンライナーにしたら以下。
selected=$(whiptail --radiolist "ラジオリスト" 0 0 0 \ 0 選択肢0 ON \ 1 選択肢1 OFF \ 2 選択肢2 OFF \ 3>&1 1>&2 2>&3) && echo $selected
おまけ
dialog
dialog
コマンドをインストールするとカレンダーなどのTUIが使えるらしい。
- http://kfujito2.asablo.jp/blog/2017/05/05/8545233
- https://linuxgazette.net/101/sunil.html
- https://bash.cyberciti.biz/guide/Bash_display_dialog_boxes#Common_dialog_boxes_and_their_options
whiptail
に無くてdialog
に有るのは以下。
--calendar <text> <height> <width> <day> <month> <year> --dselect <directory> <height> <width> --editbox <file> <height> <width> --fselect <filepath> <height> <width> --inputmenu <text> <height> <width> <menu height> <tag1> <item1>... --pause <text> <height> <width> <seconds> --tailbox <file> <height> <width> --tailboxbg <file> <height> <width> --timebox <text> <height> <width> <hour> <minute> <second>
zenity
GUI作成するコマンド。
- zenity bashでGUI作成するコマンド
- zenity --list でリスト表示する
- zenity --text-info でテキストやHTMLを表示する
- zenity --notification でデスクトップ通知する
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12
- zenity 3.28.1
- whiptail 0.52.19
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux