シェルスクリプトでGUIのウインドウを表示させる

Linux Mint 共通

シェルスクリプトからGUIのダイアログウインドウを表示させて値をシェルスクリプトへ渡したい場合はzenityコマンドである程度の事が出来ます。
zenityパッケージをインストールすれば使えるようになります。

使い方

コマンドとオプションを付けるだけで実行出来ます。

zenity ダイアログ種類指定オプション 共通オプション ダイアログ専用オプション

表示されたダイアログによってはzenityコマンドが終了した際にウインドウ内で入力した内容や選択したファイル名などが出力されます。
なにもしない場合は標準出力へ出力されるようです。

この値を変数へ入れたい場合は

変数=`zenity オプション...`

で値を受け取ることが出来ます。


共通オプション

各ダイアログの共通オプションです。

--title=テキスト
ウインドウのタイトルを指定します。

--window-icon=アイコンのパス
ウインドウタイトルバーに表示するアイコンを指定します。

--width=数値
ウインドウの横幅を指定します。

--height=数値
ウインドウの縦幅を指定します。

--timeout=秒
ウインドウを表示している時間を指定します。


各種ダイアログ

種類は豊富ですが、個人が作ったシェルスクリプトで使いそうなものだけ紹介

カレンダー



カレンダーを表示して選択した日付テキストを受け取る事が出来ます。
受け取る日付テキストはシステムでの日付表示設定により変化します。

zenity --calendar

カレンダーで使えるオプション

--text=テキスト
カレンダーウインドウ内に表示するメッセージを指定出来ます。

--year=数値 、--month=数値 、 --day=数値
ウインドウが開いた時に選択されている年・月・日を指定します。
オプションを省略した場合は現在の年・月・日を選択します。

--date-format=パターン
出力されるテキストの形式を指定します。
設定によっては区切り記号を任意に入れることが出来ます。

%y %m %d
年月日を各2桁で出力します。

%Y
西暦を4桁で出力します。

%D
月(2桁)/日(2桁)/年(西暦下2桁)の形式で出力します。


テキスト入力



1行のテキストボックを表示します。

zenity --entry

テキスト入力のオプション

--text=テキスト
テキストボックスの上部に表示されるテキストを設定します。

--entry-text=テキスト
テキストボックスに初期入力されるテキストを設定します。

--hide-text
テキストボックスに入力された文字を隠します。パスワード入力などに使います。
出力時には入力した文字が出力されます。
これとは別にパスワード用のダイアログがあるのであまり意味ないかも…


ファイル選択ダイアログ



ファイルやフォルダを選択するダイアログを表示します。
選択したファイルはパスを含めたテキストで出力されます。

zenity --file-selection

ファイル選択ダイアログのオプション

--filename=ファイル名
ダイアログを開いた時にあらかじめ選択されているファイルを設定します。
最初に開いたフォルダに指定したファイル名がない場合はファイルを選択しません。

--multiple
複数のファイルを選択出来るようになります。
複数選択時の出力はデフォルトでパイプライン記号(|)で区切られます。

--directory
ディレクトリしか選択できなくなります。
ディレクトリのパスを取得したい場合に使います。

--save
ファイルの保存モードになります。
一般的なアプリケーションの「ファイル名を指定して保存」と同じです。

--separator='セパレート記号'
--multipleを指定した時に出力されるデータの区切り記号を指定します。
指定する区切り記号はシングルクオートで囲って下さい。
不可視文字の改行やタブは$'\n'や$'\t'と指定して下さい。
省略した場合はパイプライン記号( | )になります。

--confirm-overwrite
--saveの保存モードの際に、指定したファイル名と同名のファイルがある場合は上書きするか選択出来るようになります。

--file-filter=パターン
ダイアログで表示されるファイルをフィルタリングで絞り込みます。


リストダイアログ



リストボックスを持ったダイアログです。
リストから目的のアイテムを選択することが出来ます。

zenity --list

このダイアログはオプション無しでは起動できません。リストが空でも最低でも列見出しを設定する必要があります。

リストダイアログのオプション

--text=テキスト
リスト上部に表示されるテキストを設定します。

--column=項目名 データ...
先頭の引数が列の項目名になり、それ以降がリストのデータになります。
複数の列を設定できますが、はっきり言ってめんどくさすぎて変数を使って動的にリスト作成するの
ならやめたほうがいいレベル…
変数の値にスペースが入っていると正しい要素にならないので"$変数"とダブルクオーテーションで囲みましょう。

--checklist
先頭の列にチェックボックスを付けたリストにします。
複数のアイテムを選択する場合に利用します。
この機能を使う場合は、--columnの1列目の設定は列の名前だけ設定して下さい。
--radiolistと一緒に使うことは出来ません。

--radiolist
先頭の列にラジオボタンを付けたリストにします。
リストの中からひとつのアイテムを選択する場合に利用します。
この機能を使う場合は、--columnの1列目の設定は列の名前だけ設定して下さい。
--checklistと一緒に使うことは出来ません。

--separator=区切り文字
出力するデータの区切り文字を設定します。

--editable
リストに表示されているデータを編集することが出来ます。
--checklistまたは--radiolistを設定している場合はこのオプションを追加しても編集できません。

--multiple
リストを複数選択することが出来ます。
--checklistまたは--radiolistを設定している場合はこのオプションを追加する意味はありません。


フォームダイアログ



エントリーフィールド、パスワードフィールド、カレンダーフィールドが表示できるウインドウを作成出来ます。

フォームダイアログのオプション

--add-entry=テキスト
entryフィールドを追加します。

--add-password=テキスト
パスワード入力フィールドを追加します。

--add-calendar=テキスト
カレンダーフィールドを追加します。

--forms-date-format=パターン
日付データ出力時の書式を設定します。
カレンダーダイアログと同じです。

--separator=区切り文字
複数のデータ出力時の区切り記号を指定します。
他のセパレーター設定と動作は同じです。


テキストインフォメーションダイアログ



複数行表示可能なテキストボックスが配置されるウインドウを表示します。

テキストインフォメーションダイアログのオプション

--filename=ファイル名
外部のテキストファイルや変数を読み込んでテキストボックスに表示します。

--editable
テキストを編集できるようになります。

--checkbox=ラベル名
チェックを入れないとOKボタンが押せなくなるチェックボックスを配置します。
利用規約のウインドウによくあるやつと同じ動作です。

--ok-label=ラベル名
OKボタンの表示文字を変更します。
省略可。省略した場合はデフォルトで設定されている文字が入ります。

--cancel-label=ラベル名
キャンセルボタンの表示文字を変更します。
省略可。省略した場合はデフォルトで設定されている文字が入ります。


他にもありますが、よく使いそうなのはこのくらいです。
readコマンド使って値を入力したりするのが煩わしい時に使うと便利そうです。
無理に多用すると逆にシェルスクリプトの柔軟性が損なわれる場合もあると思うので、必要になったらちょっと使ってみる程度にとどめておいたほうがいいような気がします。
Comments