我有一个zenity的问题我无法解决。你能帮助我吗?
我有一个7行长的tmp3文件:
AAA
BBB
...
FFF
GGG
我想通过zenity发送这个文件,以便它显示一个清单,可以用我想要的每个组合来检查我想要的每一行。
我之前写过:
cat tmp3 | zenity --list \
--column='#' \
--text "Select playlist from the list below" \
--title "Please select one or more playlists" \
--multiple \
--width=300 \
--height=300 \
--checklist \
--column "Select" \
--separator="/ ")
所有这一切都是在zenity中用tmp3的所有7个文件创建一行。那不是我想要的。
我目前写道:
choice=$(zenity --list \
--column "Playlists" FALSE $(cat tmp3) \
--text "Select playlist from the list below" \
--title "Please select one or more playlists" \
--multiple \
--width=300 \
--height=300 \
--checklist \
--column "Select" \
--separator="/ ")
这里真的很奇怪,我不明白。 7个字段中的4个以zenity创建:AAA CCC EEE和GGG。但不是其他的。当我设置-x进行调试时,我可以看到所有7行被管道传输到zenity ......发生了什么?????
我通过列出当前文件夹中的7个子文件夹尝试了另一种解决方案(它恰好与tmp3中的行完全相同)。同样的事情发生了!:
我写了这个:
choice=$(zenity --list \
--column "Playlists" FALSE $(ls -d -1 */) \
--text "Select playlist from the list below" \
--title "Please select one or more playlists" \
--multiple \
--width=300 \
--height=300 \
--checklist \
--column "Select" \
--separator="/ ")
第二种解决方案似乎更容易,但我的技能不是很高。我想了解后一种解决方案以及为什么会这样做。
谢谢你们!
编辑: 我找到了这个并试图让它按照我的方式工作但到目前为止没有成功...... http://www.linuxquestions.org/questions/programming-9/reading-lines-to-an-array-and-generate-dynamic-zenity-list-881421/
答案 0 :(得分:2)
部分FALSE $(cat tmp3)
扩展为
FALSE AAA
BBB
CCC
DDD
EEE
FFF
GGG
您需要的是
FALSE AAA
FALSE BBB
FALSE CCC
FALSE DDD
FALSE EEE
FALSE FFF
FALSE GGG
实现此目标的一种方法是--column "Playlists" $(sed s/^/FALSE\ / tmp3) \
答案 1 :(得分:1)
我知道我有点晚了,但想要同样的事情,并最终弄清楚了。 我的解决方案进行搜索(隐藏错误),为每个结果添加TRUE和换行符(这是关键!),然后将结果发送到zenity:
CHECKED=`find /music/folder -name "*.mp3" -type f 2>/dev/null | \
awk '{print "TRUE\n"$0}' | \
zenity --list --checklist --separator='\n' --title="Select Results." \
--text="Finding all MP3 files..." --column="" --column="Files"`
在你的情况下,我想这应该是:
CHECKED=`cat tmp3 | awk '{print "TRUE\n"$0}' | zenity --list --checklist \
--separator='/ ' --title="Select Results." \
--text="Finding all MP3 files..." --column="" --column="Select"`
所以似乎Zenity将每个换行符放在一个列中,并以这种方式填充列表。这意味着您可以操作进入Zenity的字符串以添加任意数量的列。
答案 2 :(得分:0)
man zenity
中有一个有趣的例子:
zenity \
--list \
--checklist \
--column "Buy" \
--column "Item" \
TRUE Apples \
TRUE Oranges \
FALSE Pears \
FALSE Toothpaste
你只需打开一个神经元来适应它=)
修改强>:
如果你有一个未定义的长度列表,这个例子会更有趣:
find . -name '*.h' |
zenity \
--list \
--title "Search Results" \
--text "Finding all header files.." \
--column "Files"
答案 3 :(得分:0)
简而言之,您有两种选择:
选项一:输入文件,换行符分隔列
而不是
cat tmp3 | zenity ... ...
做的:
sed 's/^/.\n/' tmp3 | zenity ... ...
选项二:内联命令,colunms从命令args中读取为对
而不是
cat tmp3 | zenity ... ...
做的:
zenity ... ... `sed 's/^/. /' tmp3`
答案 4 :(得分:-1)
$ zenity --list --checklist --height 400 --text "Select playlist from the list below" --title "Please select one or more playlists" --column "Playlists" --column "Select" --separator="/ "
$(ls -d -1 */ | xargs -L1 echo FALSE)