0

これは私が現時点で持っているコードです-ファイル拡張子を持つすべてのファイルを見つけてラジオ.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

最初のアイテムだけを選択し、残りは選択しないようにするにはどうすればよいですか? この質問/回答で示唆されているように、配列を使用してこれを実行できることはわかっていますが、かなり多くのコードが必要になります。これを達成するためのよりエレガントな方法はありますか?

4

1 に答える 1

3

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'
于 2014-04-14T14:25:38.950 に答える