1

我正在尝试实现一个 zenity radiolist,它显示从 find 命令返回的所有目录。我正在使用具有 79 个目录的路径来测试我的命令。当我输入命令时:

dir="/media/multiMediaA_intHdA720Gb/music/rockNextGen/lighter" ; artDir=$(find "$dir"  -maxdepth 1 -type d | sort | wc -l) ; echo "$artDir"

我得到了 79 的预期输出(找到了目录)。但是,当我通过 zenity 管道时,例如:

dir="/media/multiMediaA_intHdA720Gb/music/rockNextGen/lighter" ; artDir=$(find "$dir"  -maxdepth 1 -type d | sort | zenity --list --title "All albums : selected band" --text "Enter the band you want to listen to:" --column "Select" --column "Artist" --radiolist --height 900 --width 200) ; echo "$artDir"

正如预期的那样,我得到了一个 zenity radiolist 窗口,但仅列出了 79 个(〜一半)目录中的 39 个。

我搜索了可能的 zenity 列表大小限制,但想出了 nadda。有谁知道zenity是否确实存在这样的限制,或者我可能做错了什么,或者zenity调用中省略了一个选项?

更多细节

有趣的是,如果我通过 yad 而不是 zenity 管道返回的结果是 40 而不是 39,所以仍然只有〜一半的目录。如果我选择包含 90 个目录的不同路径,则 zenity 仅列出其中的 44 个,而 yad 列出 45 个。

4

2 回答 2

2

我刚刚在我的盒子上试seq 1 100 | zenity --list --column number了一下,它显示了所有 100 个数字。我的 zenity 版本是 3.8.0。

所以我猜你的脚本中还有其他事情。

更新:我想我可能已经弄清楚发生了什么。您已经定义了两列,所以我认为这意味着 zenity 期望后面的任何 args (或stdin在您的情况下来自 的输入行)以<column 1 value> <column 2 value> <column 1 value> <column 2 value> .... 例如,如果您有一个名为“Name”的列和另一个名为“Age”的列,您可能会执行以下操作:

zenity --list --column Name --column Age Alice 25 Bob 40 Carol 37 ...

您已经定义了两列,但只为一列提供了值。

更新 2:我只是在我的盒子上玩了一下,我认为你只需要添加一些虚拟值来填充第 1 列。由于第一列只是一堆单选按钮,因此您并不真正关心为该列提供的值。它们可以是全部1xfoo或其他。当您选择一个单选按钮并点击 OK 时,zenity 无论如何都会从第 2 列传回值,因此第 1 列的值完全没有意义。

我刚刚在我的盒子上做了这个,它按预期工作:

seq 1 100 | sed 's/^/x\n/g' | zenity --list --radiolist --column Select --column Number

也就是说,它显示了 100 行,第一列带有单选按钮,标记为“选择”,第二列中有数字 1-100,标记为“数字”。

将此想法应用于您的命令,您将获得:

dir="/media/multiMediaA_intHdA720Gb/music/rockNextGen/lighter" ; artDir=$(find "$dir"  -maxdepth 1 -type d | sort | sed 's/^/x\n/g' | zenity --list --title "All albums : selected band" --text "Enter the band you want to listen to:" --column "Select" --column "Artist" --radiolist --height 900 --width 200) ; echo "$artDir"

试试看,让我们知道它是否有效。

于 2014-03-18T21:14:05.677 回答
0

我使用以下选择多个文件并删除了前两个字符(句点和正斜杠),以便我可以创建多个文件列表作为变量列表 $LIST 输入。

目录=pwd

LIST=$(find . -maxdepth 1 -type d | sort | sed -r 's/^.{2}//g' | zenity --list --title "选择文件" --column "Files" --多个 --separator=" " --height 900 --width 400) ; 回声“$LIST”

于 2015-04-30T15:50:59.050 回答