para el bucle no funciona en bash


7

Tengo el siguiente código para reemplazar algunas cadenas en varios archivos, pero el bucle for está buscando el primer archivo y no está ejecutando el script perl. a continuación está mi código

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
Elimine el $(...)patrón de globo alrededor de su nombre de archivo. No necesita una sustitución de comando allí. También puede combinar las cuatro invocaciones de Perl en una sola para obtener velocidad.
— Kusalananda

Respuestas:


9

La $(foo)construcción ejecutará el comando fooy lo reemplazará $(foo)con la salida de ejecución foo. Quieres un pegote, eso no es un comando. Lo que estás haciendo es intentar ejecutar todos los archivos llamados ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*. Todo lo que necesitas es:

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

O, más simplemente:

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

O incluso más simplemente:

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
¿Se necesita el bucle? ¿Puede perl -iptrabajar en varios archivos a la vez? Nunca he probado taht.
— Kusalananda

@Kusalananda de hecho puede. Debería haber pensado en eso, gracias!
— terdon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.