untuk loop tidak bekerja di bash

7

Saya memiliki kode di bawah ini untuk mengganti beberapa strigns dalam beberapa file, tetapi untuk loop memeriksa file pertama dan tidak mengeksekusi skrip perl. di bawah ini adalah kode saya

if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ]
then
    for file in $(./zebu.work.post_opt/ZEBU_CTO_FT_MOD*);
    do
    perl -i -p -e 's/input/inout/g' $file; 
        perl -i -p -e 's/output/inout/g' $file;
        perl -i -p -e 's/wire.*\n/tran\(i0,\ o\);/g' $file;
        perl -i -p -e 's/assign.*\n//g' $file;
    done
fi
sudhir prabhu
sumber
2
Hapus $(...)sekitar pola globbing nama file Anda. Anda tidak perlu substitusi perintah di sana. Anda juga dapat menggabungkan empat doa Perl untuk satu doa untuk kecepatan.
Kusalananda

Jawaban:

9

The $(foo)membangun akan menjalankan perintah foodan mengganti $(foo)dengan output dari berjalan foo. Anda ingin bola, itu bukan perintah. Apa yang Anda lakukan adalah mencoba menjalankan semua file yang dipanggil ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*. Yang kamu butuhkan adalah:

if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ]
then
    for file in ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*;
    do
        perl -i -p -e 's/input/inout/g' "$file"
        perl -i -p -e 's/output/inout/g' "$file"
        perl -i -p -e 's/wire.*\n/tran\(i0,\ o\);/g' "$file"
        perl -i -p -e 's/assign.*\n//g' "$file"
    done
fi

Atau, lebih sederhana:

if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ]
then
    for file in ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*;
    do
        perl -i -p -e 's/input/inout/g; s/output/inout/g; 
                       s/wire.*\n/tran\(i0,\ o\);/g; 
                       s/assign.*\n//g' "$file"
    done
fi

Atau bahkan lebih sederhana:

if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ]
then
    perl -i -p -e 's/input/inout/g; s/output/inout/g; 
                   s/wire.*\n/tran\(i0,\ o\);/g; 
                   s/assign.*\n//g' ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*
fi
terdon
sumber
3
Apakah loop itu diperlukan? Bisakah perl -ipbekerja pada beberapa file sekaligus? Saya belum pernah menguji itu.
Kusalananda
@ Kusalananda memang bisa. Seharusnya memikirkan itu, terima kasih!
terdon