我正在尝试实现一个显示从查找命令返回的所有dir的zenity radiolist。我使用一个具有79个dir的路径来测试我的命令。当我输入命令:
dir="/media/multiMediaA_intHdA720Gb/music/rockNextGen/lighter" ; artDir=$(find "$dir" -maxdepth 1 -type d | sort | wc -l) ; echo "$artDir"
我得到了预期的输出79 (dir's found)。但是,当我像
这样通过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列表大小限制,但没有找到。有没有人知道是否真的有这样的限制与zenity,或者我可能做错了什么,或者也许在zenity呼叫中省略了一个选项?
更多细节
有趣的是,如果我通过yad而不是zenity,返回的结果是40而不是39,所以仍然只有~一半的dirs。如果我选择一个包含90个dir的不同路径,zenity只列出其中的44个,而yad列出45个。我刚刚在我的盒子上尝试了seq 1 100 | zenity --list --column number
,它显示了所有100个数字。我的zenity版本是3.8.0。
所以我猜你的脚本里有别的东西。
更新:我想我可能知道是怎么回事了。您已经定义了两列,所以我认为这意味着zenity期望跟随的任何参数(或从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。因为第一列将是一堆单选按钮,你并不关心你为那列提供了什么值。它们可以是1
或x
或foo
或其他。当你选择一个单选按钮并点击OK时,zenity会将第二列的值传递回去,所以第一列的值是完全没有意义的。
我刚刚在我的盒子上做了这个,它像预期的那样工作了:
seq 1 100 | sed 's/^/xn/g' | zenity --list --radiolist --column Select --column Number
也就是说,它显示了100行,单选按钮位于第一列,标记为"Select",数字1-100位于第二列,标记为"Number"。
把这个想法应用到你的命令中,你会得到:
dir="/media/multiMediaA_intHdA720Gb/music/rockNextGen/lighter" ; artDir=$(find "$dir" -maxdepth 1 -type d | sort | sed 's/^/xn/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"
我使用下面的代码选择了多个文件,并删除了前两个字符(句号和正斜杠),这样我就可以创建一个包含多个文件的列表,作为变量list $ list输入。
dir= pwd
= $(找到列表。-maxdepth 1 -type d | sort | sed -r 's/^。{2}//g' | zenity——list——title "Select files"——column " files"——multiple——separator=" "——高900——宽400);回声"美元名单"