如何使用GUI对话框提示用户通过命令行选择文件/目录路径?
假设我有一个这样的脚本:
(该示例描述了一个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的修改版本,它看起来像这样:
使用它的一种方法是这样的:
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"
注意:您也可以使用YAD ,它是一个Zenity的分支,具有更多function。
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有) – 它有更多的function,但检查兼容性(基于文档它应该适用于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
和第二个传递的destination
。 输出放在数组selection[]
中,变量i
用作索引。 它在开始时设置为0,并在每次传递时递增。 因此,源保存为${selection[1]}
和目的地${selection[2]}
。
第一行的DIR =“/ home”设置对话框默认值。 可以通过键入yad --help
从终端找到yad命令选项。
这是答案的最短(也是最好)解决方案: Yad
提供了与zenity
一样的确切选项:
yad --file-selection --directory
这将打开目录选择对话框。 如果没有附加参数--directory
,它将成为文件选择对话框。