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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.