Como faço para marcar apenas uma seleção como TRUE em uma radiolista dinâmica do zenity?
Pergunta
Este é o código que tenho no momento - ele encontra todos os arquivos que possuem a extensão de arquivo .sv
e os lista em um zenity
radiolist, no entanto, nenhum dos itens é selecionado.Claro, se eu mudar awk '{print "FALSE\n"$0}'
para awk '{print "TRUE\n"$0}'
todos eles serão selecionados, o que eu não quero.
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
Como faço para selecionar apenas o primeiro item e o restante não?Eu sei que isso pode ser feito usando arrays, como sugerido por esse pergunta/resposta, no entanto, exigiria significativamente mais código.Existe uma maneira mais elegante de conseguir isso?
Solução
Você pode alterar seu awk
comando para imprimir "TRUE" se for a primeira linha a ser processada.Você também pode remover seu cut
comandos usando 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
Você também pode usar sed
no lugar de `awk:
sed -e '1iTRUE' -e '1!iFALSE'