Wie markiere ich in einer dynamischen Zenity-Radioliste nur eine Auswahl als WAHR?

StackOverflow https://stackoverflow.com//questions/23062310

  •  26-12-2019
  •  | 
  •  

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?

War es hilfreich?

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'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top