Wie markiere ich in einer dynamischen Zenity-Radioliste nur eine Auswahl als WAHR?
Frage
Dies ist der Code, den ich im Moment habe – er findet alle Dateien, die die Dateierweiterung haben .sv
und listet sie in a auf zenity
radiolist, jedoch ist keines der Elemente ausgewählt.Natürlich, wenn ich mich ändere awk '{print "FALSE\n"$0}'
Zu awk '{print "TRUE\n"$0}'
Sie werden alle ausgewählt, was ich nicht möchte.
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
Wie kann ich dafür sorgen, dass nur das erste Element ausgewählt wird und der Rest nicht?Ich weiß, dass dies durch die Verwendung von Arrays erreicht werden kann, wie von vorgeschlagen Das Frage/Antwort, es würde jedoch deutlich mehr Code erfordern.Gibt es eine elegantere Möglichkeit, dies zu erreichen?
Lösung
Sie können Ihre ändern awk
Befehl zum Ausdrucken von „TRUE“, wenn es sich um die erste zu verarbeitende Zeile handelt.Sie können Ihre auch entfernen cut
Befehle durch Verwendung 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
Sie könnten auch verwenden sed
anstelle von `awk:
sed -e '1iTRUE' -e '1!iFALSE'