Existem certamente muitas maneiras de mudar isso. Aqui está apenas um:
#!/bin/bash
if [ ! -f proto.h ]; then
touch proto.h
fi
for file_to_parse in 'find -type f -name "*.c"'; do
cproto $file_to_parse >> proto.h 2> /dev/null
done
O erro está no redirecionamento na linha cproto...
: o simples >
primeiro limpa o arquivo de destino e grava nele. Em vez disso, >>
acrescenta ao arquivo de destino sem destruí-lo. O loop if
está lá apenas para garantir que, na primeira passagem, você não esteja anexando a um arquivo inexistente: não há nada de errado em acrescentar a um arquivo inexistente, nenhum erro é lançado; é só que eu gostaria de ter certeza de que é um arquivo simples, regular , antes de escrevê-lo.