Pan*_*dya 19 gui command-line prompt
假设我有一个这样的脚本:
(该示例描述了一个 rysnc 用例)
#!/bin/bash
echo -n "Enter Source Directory:"
read srcdir
echo -n "Enter Destination Directory:"
read dstdir
rsync -av --delete "$srcdir" "$dstdir"
Run Code Online (Sandbox Code Playgroud)
这里的想法是提示用户输入 rsync 使用的“源”和“目标”目录。照原样,用户将不得不通过命令行手动输入 /path/to/directory/
。
相反,我想提示用户通过GUI 界面输入路径。
像这样的东西:
我可以使用哪些命令通过GUI 选择窗口提示用户,该窗口将文件路径返回到命令行?
Wil*_*ilf 38
您可以将其用于文件:
zenity --file-selection
Run Code Online (Sandbox Code Playgroud)
这对于文件夹:
zenity --file-selection --directory
Run Code Online (Sandbox Code Playgroud)
要使用,请运行:
zenity --help-general
zenity --help-file-selection
Run Code Online (Sandbox Code Playgroud)
通常它与当前主题匹配(无论如何对于 GTK 窗口管理器),在我的机器上使用 Zukitwo 3.8 的修改版本,它看起来像这样:
一种使用方法是这样的:
echo "you selected $(zenity --file-selection)"
Run Code Online (Sandbox Code Playgroud)
这将导致you selected /path/to/file
.
您还可以使用选项来设置适当的标题,以及它开始的目录 - 对于您的 rsync 用例,例如:
zenity --file-selection --directory --title="Choose rsync source directory" --filename=$HOME/Desktop/
Run Code Online (Sandbox Code Playgroud)
对于文件,您还可以指定要选择的文件类型 - 例如:
zenity --file-selection --file-filter='PDF files (pdf) | *.pdf' --title="Select a PDF file"
Run Code Online (Sandbox Code Playgroud)
注意:您还可以使用YAD,它是 Zenity 的一个分支,具有更多功能。
sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,您可以以相同的方式使用它 - 对于文件浏览器:
yad --file-selection
Run Code Online (Sandbox Code Playgroud)
和帮助页面:
yad --help-all
Run Code Online (Sandbox Code Playgroud)
尽管当时(大约是 26 版?),它还没有更新以匹配新的 GTK 3.14+ 界面(zenity 有)-它具有更多功能,但请检查兼容性(根据文档,它应该适用于 GTK+ >= 2.16。 0
kra*_*xor 20
只是为了记录,您可以使用dialog
基于文本的用户界面 (TUI) 解决方案。
句法:
dialog --title "text" --fselect /path/to/dir height width
Run Code Online (Sandbox Code Playgroud)
例子:
FILE=$(dialog --stdout --title "Please choose a file" --fselect $HOME/ 14 48)
echo "${FILE} file chosen."
Run Code Online (Sandbox Code Playgroud)
输出将是这样的:
正如@Wilf 所指出的,您可以使用$LINES
和$COLUMNS
变量使其填充终端:
$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))
Run Code Online (Sandbox Code Playgroud)
我知道这已经 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]}\""
Run Code Online (Sandbox Code Playgroud)
它的工作方式是这样的。我们把连日来在for循环中,变量设置$location
到source
了第一遍和destination
第二。输出放置在selection[]
变量i
用作索引的数组中。这在开始时设置为 0,并随着每次通过而增加。因此源被保存为 ${selection[1]}
和目的地${selection[2]}
。
第一行的 DIR="/home" 设置对话框默认值。可以通过在终端中键入 来找到 yad 命令选项yad --help
。
归档时间: |
|
查看次数: |
30151 次 |
最近记录: |