Suppose I have a script like this:
(The example depicts an rysnc use case)
#!/bin/bash
echo -n "Enter Source Directory:"
read srcdir
echo -n "Enter Destination Directory:"
read dstdir
rsync -av --delete "$srcdir" "$dstdir"
The idea here is to prompt the user to enter the "Source" and "Destination" directories for rsync to work with. As is, the user will have to manually enter /path/to/directory/
via the command-line.
Instead, I want to prompt the user to enter the paths through a GUI interface.
Something like this:
What commands can I use to prompt the user with a GUI selection window that returns the file path to the command-line?
You can use this for files:
and this for folders:
for usage, run:
Generally it matches the current theme (for GTK window managers anyway), on my machine with a modded version of Zukitwo 3.8 it looks like this:
One way of using it is like this:
Which would result in
you selected /path/to/file
.You can also use options to set an appropriate title, and the directory it starts in - With your rsync use case, for example:
For files, you can also specify a filetype to select - e.g:
NOTE: You can also use YAD, a fork of Zenity that has loads more features.
Source
For the most part you can use it the same way - for the file browser:
and for the help page:
Though at the time (around version 26?), it had not been updated to match the new GTK 3.14+ interface (zenity had) - it has more features, but check compatibility (based on documentation it should work on GTK+ >= 2.16.0
Just for the record, you can use
dialog
for a Text-based User Interface (TUI) solution.Syntax:
Example:
The output will be something like this:
As pointed out by @Wilf, you can use the
$LINES
and$COLUMNS
variables to make it fill the terminal:I know this is 8 months old and also that the OP's question has been answered. However, yad has been mentioned but no example has been offered. Here's my solution using yad.
The way it works is like this. We put yad in a for loop, setting the variable
$location
tosource
for the first pass anddestination
for the second. The output is placed in the arrayselection[]
for which the variablei
is used as the index. This is set to 0 at the start and incremented with each pass. Hence the source is saved as${selection[1]}
and the destination${selection[2]}
.The DIR="/home" on the first line sets the dialog default. The yad command options can be found from the terminal by typing
yad --help
.Here is the shortest (and best) solution to the answer:
Yad
provides the exact option just likezenity
does:This opens a directory selection dialog. Without the additional argument
--directory
it will be a file selection dialog instead.