كيف يمكنني وضع علامة على تحديد واحد فقط على أنه TRUE في قائمة راديو zenity الديناميكية؟

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

  •  26-12-2019
  •  | 
  •  

سؤال

هذا هو الكود الموجود لدي حاليًا - فهو يعثر على جميع الملفات التي لها امتداد الملف .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'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top