pour la boucle ne fonctionnant pas dans bash


7

j'ai le code ci-dessous pour remplacer certains strigns dans plusieurs fichiers, mais la boucle for vérifie le premier fichier et n'exécute pas le script perl. ci-dessous est mon code

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
Supprimez le $(...)contour de votre motif de globbing de nom de fichier. Vous n'avez pas besoin d'une substitution de commande là-bas. Vous pouvez également combiner les quatre invocations Perl en une seule pour la vitesse.
Kusalananda

Réponses:


9

La $(foo)construction exécutera la commande fooet la remplacera $(foo)par la sortie de l'exécution foo. Vous voulez un glob, ce n'est pas une commande. Vous essayez d'exécuter tous les fichiers appelés ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*. Tout ce dont tu as besoin c'est:

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

Ou, plus simplement:

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

Ou encore plus simplement:

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
La boucle est-elle même nécessaire? Peut perl -iptravailler sur plusieurs fichiers à la fois? Je n'ai jamais testé le taht.
Kusalananda

@Kusalananda, c'est possible. J'aurais dû y penser, merci!
terdon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.