Bash 具有多行的zenity输入文件
我对zenity有个问题,我无法解决。你们能帮帮我吗 我有一个7行长的tmp3文件:Bash 具有多行的zenity输入文件,bash,input,line,cat,zenity,Bash,Input,Line,Cat,Zenity,我对zenity有个问题,我无法解决。你们能帮帮我吗 我有一个7行长的tmp3文件: AAA BBB ... FFF GGG 我想通过zenity发送这个文件,这样它就会显示一个清单,可以检查我想要的每一行和我想要的每一个组合 我以前写过: cat tmp3 | zenity --list \ --column='#' \ --text "Select playlist from the list below" \
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="/ ")
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="/ ")
这里发生了一些非常奇怪的事情,我不明白。zenity中创建了7个字段中的4个:AAA CCC EEE和GGG。但不是其他的。当我设置-x进行调试时,我可以看到所有7行都被传输到zenity。。。发生了什么事
我尝试了另一种解决方案,列出了我当前文件夹中的7个子文件夹(它们恰好与tmp3中的行具有完全相同的名称)。同样的事情也会发生
我写道:
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="/ ")
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="/ ")
第二个解决方案似乎更简单,但我的技能不是很高。我想了解后一种解决方案,以及它为什么会这样做
谢谢你们
编辑:
我已经找到了这个,并试图让它工作我的方式,但没有成功到目前为止。。。
在《人类文明》中有一个有趣的例子:
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"
零件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
实现这一点的一个方法是
--列“Playlists”$(sed s/^/FALSE\/tmp3)\
我知道我有点晚了,但我也想要同样的东西,并最终找到了答案。
我的解决方案执行搜索(隐藏错误),为每个结果添加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的字符串以添加任意数量的列。简而言之,您有两个选项: 选项一:输入文件,换行分隔列 而不是
cat tmp3 | zenity ... ...
cat tmp3 | zenity ... ...
做:
选项二:内联命令,列从命令args成对读取
而不是
cat tmp3 | zenity ... ...
cat tmp3 | zenity ... ...
做:
我已经看到了,不知道这和我有什么关系。是的,我在使用清单,但这个例子有一个已知的列数。我不知道。这就是为什么我要将tmp3文件传输到zenityAFAIK,您不能同时使用
--checkbox
和未定义的列表长度!谢谢你的新例子,我让它工作了,但我最终遇到了与我的例子2和3相同的问题。现在我的zenity清单中只有3行:BBB CCC和DDD。我写了这个“发现”-键入d-maxdepth 1-mindepth 1 | zenity--list \--列“Playlists”`您需要将每个文件显示在换行符上,以将其传送到zenity
。请看man ls
对不起,我想我不明白你的意思。何时需要使用ls工具?如果你的意思是在tmp3中,是的,它们都在不同的行上(如果重要的话,每行末尾没有空格)。请你说清楚一点好吗?