假设我有这样的脚本:
(该示例描绘了一个 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 选择窗口将文件路径返回到命令行?
答案1
您可以将其用于文件:
zenity --file-selection
对于文件夹,如下所示:
zenity --file-selection --directory
要使用,请运行:
zenity --help-general
zenity --help-file-selection
通常它与当前主题相匹配(无论如何对于 GTK 窗口管理器而言),在我的装有修改版 Zukitwo 3.8 的机器上它看起来像这样:
它的其中一种使用方法如下:
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 的一个分支,具有更多功能。
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
仅供记录,您可以使用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 指出的那样,您可以使用$LINES
和$COLUMNS
变量使其填充终端:
$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))
答案3
我知道这是 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
用于第一次传递,destination
第二次传递。输出放置在数组中selection[]
,变量i
用作索引。这在开始时设置为 0,每次传递时递增。因此,源保存为 ${selection[1]}
,目标保存为${selection[2]}
。
第一行的 DIR="/home" 设置对话框默认值。可以通过在终端中输入 来找到 yad 命令选项yad --help
。
答案4
这是答案的最短(也是最佳)解决方案:
Yad
提供精确的选项,就像zenity
:
yad --file-selection --directory
这将打开目录选择对话框。如果没有附加参数,--directory
它将改为文件选择对话框。