如何在动态 zenity 广播列表中仅将一项选择标记为 TRUE?
题
这是我现在的代码 - 它找到所有具有该文件扩展名的文件 .sv
并将它们列在 zenity
但是,radiolist 没有选择任何项目。当然,如果我改变的话 awk '{print "FALSE\n"$0}'
到 awk '{print "TRUE\n"$0}'
他们都会被选中,这是我不想要的。
test_name=$(
find ../tests/ -name '*.sv' |
awk '{print "FALSE\n"$0}' |
cut -d "/" -f3 |
cut -d "." -f1 |
zenity --list \
--radiolist \
--title "Select test" \
--text "Tests..." \
--column "Box" \
--column "Files"
) #select test via zenity
如何让第一个项目被选中,其余的不被选中?我知道这可以通过使用数组来完成,如建议的 这 问题/答案,但是它需要更多的代码。有没有更优雅的方法来实现这一目标?
解决方案
您可以修改您的 awk
如果它是要处理的第一行,则命令打印“TRUE”。您还可以删除您的 cut
通过使用命令 basename
:
test_name=$(
find ../tests/ -name '*.sv' -exec basename {} .sv \; |
awk 'NR==1{print "TRUE\n"$0} NR>1{print "FALSE\n"$0}' |
zenity --list \
--radiolist \
--title "Select test" \
--text "Tests..." \
--column "Box" \
--column "Files"
) #select test via zenity
你也可以使用 sed
代替`awk:
sed -e '1iTRUE' -e '1!iFALSE'
不隶属于 StackOverflow