для цикла не работает в Bash


7

У меня есть код ниже, чтобы заменить некоторые strigns в нескольких файлах, но цикл for проверяет первый файл и не выполняет сценарий perl. ниже мой код

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
Удалите $(...)вокруг вашего имени файла имя шаблона. Вам не нужна подстановка команд там. Вы также можете объединить четыре вызова Perl в один для скорости.
Кусалананда

Ответы:


9

$(foo)Конструкция будет выполнить команду fooи заменить $(foo)с выходом запуска foo. Вы хотите шар, это не команда. То, что вы делаете, пытается запустить все файлы с именем ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*. Все, что тебе нужно:

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

Или проще:

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

Или еще проще:

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
Цикл вообще нужен? Может perl -ipработать с несколькими файлами одновременно? Я никогда не проверял.
Кусалананда

@ Kusalananda действительно может. Надо было подумать об этом, спасибо!
Тердон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.