Скрипт для выполнения параметров как команд для всех файлов каталога

80
8

Мне интересно, как заставить этот скрипт работать:

for f in *.php
do
for c in seq 1 $#
do
eval 'eval echo \$$c'
done
done

Основная идея скрипта y выполнить все команды, переданные скрипту в каждом файле, например:

bash script.sh "grep text \$f" "echo \"Done!\""

Должно быть такое же:

for f in *.php
do
grep text $f
echo "Done!"
done

Я думаю, что это довольно просто, но я застрял здесь долго. Любая помощь?

спросил(а) 2013-01-31T04:31:00+04:00 7 лет, 8 месяцев назад
1
Решение
57

Следующий простой рецепт в вашем скрипте bash должен работать.


for arg in "$@"
do
find . -name '*.php' -print0 | xargs -n1 -0 -i $arg {}
done

ответил(а) 2013-01-31T06:27:00+04:00 7 лет, 8 месяцев назад
71

Вы можете заставить его работать следующим образом:

for f in *.php
do
for arg
do
eval "$arg"
done
done

Более общий (и более безопасный) подход

find *.php -print0 | xargs -0 -I{} "$@"

который можно запустить как ./yourscript grep text {}, но он не позволяет создавать произвольные оболочки.

ответил(а) 2013-01-31T04:38:00+04:00 7 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема