Prova questo ... crea un file chiamato bash-is-odd.sh
:
#!/bin/bash
echo "echo yes i do odd things" >> bash-is-odd.sh
Ciò dimostra che bash sta, effettivamente, interpretando lo script "mentre vai". In effetti, la modifica di uno script di lunga durata ha risultati imprevedibili, l'inserimento di caratteri casuali ecc. Perché? Poiché bash legge dalla posizione dell'ultimo byte, la modifica sposta la posizione del carattere corrente che viene letto.
Bash è, in una parola, molto, molto pericoloso a causa di questa "caratteristica". svn e rsync
quando vengono usati con gli script bash sono particolarmente problematici, perché per impostazione predefinita "uniscono" i risultati ... modificando sul posto. rsync
ha una modalità che risolve questo problema. svn e git non lo fanno.
Presento una soluzione. Crea un file chiamato /bin/bashx
:
#!/bin/bash
source "$1"
Ora usa #!/bin/bashx
sui tuoi script ed eseguili sempre con bashx
invece di bash
. Questo risolve il problema: puoi tranquillamente i rsync
tuoi script.
Soluzione alternativa (in linea) proposta / testata da @ AF7:
{
# your script
}
exit $?
Le parentesi graffe proteggono dalle modifiche e l'uscita protegge dalle aggiunte. Ovviamente, staremmo tutti molto meglio se bash avesse un'opzione, come -w
(intero file), o qualcosa che ha fatto questo.