создание скрипта bash - просмотр файлов - PullRequest
2 голосов
/ 17 июля 2010

Мне было интересно, мне нужно запустить indent с таким набором параметров, как:

indent slithy_toves.c -cp33 -di16 -fc1 -fca -hnl -i4  -o slithy_toves.c

Я хочу прочитать все файлы *.c и *.h и перезаписать ихТо же имя.

Как я могу сделать это в скрипте bash, чтобы в следующий раз я смог запустить скрипт и сделать все отступы сразу?

Спасибо

Ответы [ 5 ]

6 голосов
/ 17 июля 2010

Я бы не стал писать цикл - утилита find может сделать это за вас:

find . -name \*.[ch] -print0 | xargs -0 indent ....
2 голосов
/ 17 июля 2010

I секунда Ответ Карла , но если вы чувствуете необходимость использовать цикл:

for filename in *.[ch]; do
    indent "$filename" -cp33 -di16 -fc1 -fca -hnl -i4  -o "$filename"
done
1 голос
/ 17 июля 2010

По умолчанию indent перезаписывает входные файлы с измененным источником, следовательно:

indent -cp33 -di16 -fc1 -fca -hnl -i4  *.c *.h
0 голосов
/ 17 июля 2010

Вот один из них:

#!/bin/bash

rm -rf newdir
mkdir newdir
for fspec in *.[ch] ; do
    indent "${fspec}" -cp33 -di16 -fc1 -fca -hnl -i4  -o "newdir/${fspec}"
done

Затем , убедитесь, что все новые файлы в newdir/ в порядке, прежде чем копировать их поверх оригиналов вручную:

cp ${newdir}/* .

Этот последний параграф важен. Мне все равно, как долго я пишу сценарии, я всегда предполагаю, что моя первая попытка испортит и, возможно, испортит мои файлы: -)

0 голосов
/ 17 июля 2010

Это должно работать:

for i in *.c *.h; do
    indent "$i" -cp33 -di16 -fc1 -fca -hnl -i4  -o "$i"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...