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
sudhir prabhu
la source
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
terdon
la source
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