コマンドラインを使用して、ファイル/ディレクトリパスを選択するGUIダイアログボックスをユーザーに表示するにはどうすればよいですか?


15

次のようなスクリプトがあるとします。

(この例は、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選択ウィンドウでユーザーにプロンプ​​トを表示するには、どのコマンドを使用できますか?



4
GUIウィンドウの使用に関する警告を忘れずに追加してください。不要なウィンドウがポップアップすると、上級ユーザーに怒りを引き起こす可能性があります。
unperson325680 14年

5
なぜ、そんなに面倒な「機能」を実装したいのでしょうか?コマンドラインでディレクトリを入力すると、タブ補完を使用でき、GUIの読み込みを待つ必要がないことに注意してください。なぜ誰もが完全に優れたシェルスクリプトにGUIを追加したいと思うのは私を超えています。
テルドン14年

1
パラダイムが混在しているので、ユーザーにWebアプリ経由でパスを入力してもらいませんか?
Tulainsコルドバ

4
@terdon ターミナルで実行するのではなく、スクリプトを直接実行する場合、GUIウィンドウを提供する必要があるためです。
パンディア14年

回答:


33

これはファイルに使用できます:

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


2
Yadは、Zenityの劇的に強化されたフォークであり、Zenityプロジェクトが休止状態になったため、主に置き換えられました。私がいることがわかりzenityを使うが、すぐに戻って、開発中Gnome.org(Gnome3のみ?)であるが、私は決してダウンロードしてご覧ください。
DocSalvager 14

@DocSalvage-そのページはかなり古く、次のリリース「3.2」と表示されます-私は今かなり古いFedora 19システムにバージョン3.8を持っています(Gnome 3.8-Gnomeシェルの各バージョンでかなりの数のgnomeが更新されます(そのため、おそらく3.10 + 3.12)に更新されます。最後に、2005-2009のバグレポートも扱います。Ubuntu repos-packages.ubuntu.com/trusty/zenityから最新の安定バージョン(再び3.8)を入手できます。Yadのコンパイル済みバージョンもここで見つけることができます
ウィルフ14

ヤッドは非常によく見える-それは禅よりも多くのオプションがあります:)
ウィルフ14

1
@Wilfはい、yadはステロイドのZenityです。それに慣れると、非常に柔軟であるため、揺れ動きます。私は改宗者です。ところで、下のOPの質問に対する回答を追加しました(これに抵抗できませんでした、申し訳ありません)。
Scooby-2

@ Scooby-2のクールなインストール手順が追加されました(将来のユーザーはコメントを入力する必要がありません)
Wilf

19

記録のdialogために、テキストベースのユーザーインターフェイス(TUI)ソリューションに使用できます。

構文:

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が指摘したように、$LINESand $COLUMNS変数を使用して、端末を埋めることができます。

$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))

1
それは正しい代替ソリューションですが、問題のようにGUIウィンドウ提供しいません
パンディア14年

2
私は知っていますが、他の誰かがそれを役に立つと思うかもしれません。混乱を避けるためにスクリーンショットを投稿しました。
クラクソール14年

7
そして、公平を期すために、それはGUI私見としての資格があります。
クラクソール14年

3
GUIとTUI(テキストUI)の間で一般的に使用される線は、「アトム」のサイズです。それはピクセルですか、それとも文字ですか?
unperson325680 14年

3
ニースの答え-いくつかの端末の幅と高さは、次のようなvariblesによって定義される$LINES$COLUMNS-あなたが実行するので$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))、それは、端末/画面ウィンドウいっぱいにします。
ウィルフ

5

私はこれが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ループに入れ、最初のパスと2番目のパスに変数$locationを設定します。出力は、変数がインデックスとして使用される配列に配置されます。これは開始時に0に設定され、パスごとに増分されます。したがって、ソースはおよびとして保存され ます。sourcedestinationselection[]i${selection[1]}${selection[2]}

最初の行のDIR = "/ home"は、ダイアログのデフォルトを設定します。yadコマンドのオプションは、と入力することにより、ターミナルから見つけることができますyad --help

yadスクリーンショット


2

ここに答えへの最短(と最高の)解決策は以下のとおりです。 Yad同じように正確なオプションを提供zenityします:

yad --file-selection --directory

これにより、ディレクトリ選択ダイアログが開きます。追加の引数--directoryがないと、代わりにファイル選択ダイアログになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.