Tente isto ... crie um arquivo chamado bash-is-odd.sh:
#!/bin/bash
echo "echo yes i do odd things" >> bash-is-odd.sh
Isso demonstra que o bash está, de fato, interpretando o script "conforme você avança". De fato, editar um script de longa execução tem resultados imprevisíveis, inserindo caracteres aleatórios etc. Por quê? Como o bash lê a partir da posição do último byte, a edição muda a localização do caractere atual que está sendo lido.
O Bash é, em uma palavra, muito, muito inseguro por causa desse "recurso". O svn e rsyncquando usado com scripts bash são particularmente problemáticos, porque por padrão eles "mesclam" os resultados ... editando no local. rsynctem um modo que corrige isso. svn e git não.
Eu apresento uma solução. Crie um arquivo chamado /bin/bashx:
#!/bin/bash
source "$1"
Agora use #!/bin/bashxem seus scripts e sempre execute-os com em bashxvez de bash. Isso corrige o problema - você pode garantir rsyncseus scripts.
Solução alternativa (em linha) proposta / testada por @ AF7:
{
# your script
}
exit $?
Os suspensórios encaracolados protegem contra edições e a saída protege contra anexos. Claro, estaríamos todos muito melhor se o bash viesse com uma opção, como -w(arquivo inteiro), ou algo que fizesse isso.