如何通过命令行使用 GUI 对话框提示用户选择文件/目录路径?

如何通过命令行使用 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 选择窗口将文件路径返回到命令行?

答案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

yad 截图

答案4

这是答案的最短(也是最佳)解决方案: Yad提供精确的选项,就像zenity

yad --file-selection --directory

这将打开目录选择对话框。如果没有附加参数,--directory它将改为文件选择对话框。

相关内容