Как мне отметить только один выбор как ИСТИННЫЙ в динамическом списке радиостанций zenity?

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

  •  26-12-2019
  •  | 
  •  

Вопрос

Это код, который у меня есть на данный момент - он находит все файлы с расширением файла .sv и перечисляет их в виде zenity однако в радиолисте ни один из элементов не выбран.Конечно, если я изменюсь 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'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top