次のようなスクリプトがあるとします。
(この例は、rysncのユースケースを示しています)
#!/bin/bash
echo -n "Enter Source Directory:"
read srcdir
echo -n "Enter Destination Directory:"
read dstdir
rsync -av --delete "$srcdir" "$dstdir"
ここでの考え方は、rsyncを使用するために「ソース」ディレクトリと「宛先」ディレクトリを入力するようにユーザーに促すことです。そのまま、ユーザーはを手動で入力する必要があります/path/to/directory/
をコマンドラインから入力します。
代わりに、GUIインターフェイスを介してパスを入力するようユーザーに促したい。
このようなもの:
コマンドラインにファイルパスを返すGUI選択ウィンドウを使用してユーザーにプロンプトを表示するには、どのコマンドを使用できますか?
これはファイルに使用できます:
zenity --file-selection
これはフォルダの場合:
zenity --file-selection --directory
使用するには、次を実行します。
zenity --help-general
zenity --help-file-selection
一般的に、現在のテーマ(とにかくGTKウィンドウマネージャーの場合)に一致しますが、Zukitwo 3.8の改造バージョンを搭載した私のマシンでは、次のようになります。
これを使用する1つの方法は次のとおりです。
echo "you selected $(zenity --file-selection)"
you selected /path/to/file
になります。
オプションを使用して適切なタイトルとそれが始まるディレクトリを設定することもできます-たとえば、rsyncの使用例:
zenity --file-selection --directory --title="Choose rsync source directory" --filename=$HOME/Desktop/
ファイルの場合、選択するファイルタイプを指定することもできます-例:
zenity --file-selection --file-filter='PDF files (pdf) | *.pdf' --title="Select a PDF file"
注:また、より多くの機能をロードするZenityのフォークである YAD を使用することもできます。
Sudo add-apt-repository ppa:webupd8team/y-ppa-manager
Sudo apt-get update
Sudo apt-get install yad
ほとんどの場合、同じように使用できます-ファイルブラウザの場合:
yad --file-selection
およびヘルプページの場合:
yad --help-all
当時(バージョン26前後?)、新しいGTK 3.14+インターフェイス(zenityにあった)に合わせて更新されていませんでした-より多くの機能がありますが、互換性を確認します(GTK +> = 2.16で動作するはずです。 0
記録のためだけに、テキストベースのユーザーインターフェイス(TUI)ソリューションにdialog
を使用できます。
構文:
dialog --title "text" --fselect /path/to/dir height width
例:
FILE=$(dialog --stdout --title "Please choose a file" --fselect $HOME/ 14 48)
echo "${FILE} file chosen."
出力は次のようになります。
@Wilfが指摘したように、$LINES
変数と$COLUMNS
変数を使用して、ターミナルを埋めることができます。
$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))
これは8か月前のものであり、OPの質問には回答済みです。ただし、yadは言及されていますが、例は提供されていません。 yadを使用したソリューションです。
DIR="/home" \
i=0;for location in source destination
do
((i++));selection[$i]=$(yad --center \
--width 350 \
--form \
--title="yad example" \
--text="Select $location directory" \
--field=:LBL "" \
--field=Path:DIR "$DIR" \
--separator='' )
done;\
echo "Command to run is \"rsync -av --delete ${selection[1]} ${selection[2]}\""
仕組みは次のとおりです。 yadをforループに入れ、変数$location
を最初のパスでsource
に設定し、2番目のパスでdestination
に設定します。出力は、変数i
がインデックスとして使用される配列selection[]
に配置されます。これは開始時に0に設定され、パスごとに増分されます。したがって、ソースは${selection[1]}
として保存され、宛先は${selection[2]}
として保存されます。
最初の行のDIR = "/ home"は、ダイアログのデフォルトを設定します。 yadコマンドのオプションは、yad --help
と入力することにより、ターミナルから見つけることができます。