Seu código tem vários problemas.
- Você está circulando em
arg
, mas dentro do loop você se refere a"$@"
, não a"$arg"
. (Isto é, obviamente, o que causa a saída problemática que você observa.) - Sua saída precisa conter uma guia no início para que a linha de ação seja uma sintaxe válida do Makefile.
- Você não está citando corretamente
"$@"
na linhafor
.
Mas, além disso, seu código também é desnecessariamente complexo. Tente isso.
printf '\tg++ -ansi -Wall -g -o' >>Makefile
printf ' %s' "$@" >>Makefile
Por acaso, se isso estiver acontecendo dentro de uma estrutura de controle de algum tipo, é provavelmente mais eficiente e mais elegante redirecionar apenas uma vez. Cada redirecionamento faz com que o arquivo seja aberto e fechado separadamente e, muitas vezes, o fluxo é mais fácil se você puder gravar apenas uma vez, independentemente de o arquivo de saída já existir.
if things are as you wish them to be; then
execute code which generates output
fi >Makefile