Isso é por design. Bash lê scripts em pedaços. Então, ele lerá uma parte do script, executará todas as linhas que puder e lerá a próxima parte.
Então você se depara com algo assim:
- Bash lê os primeiros 256 bytes (bytes 0-255) do script.
- Dentro desse primeiro 256 bytes há um comando que demora um pouco para ser executado, e o bash inicia esse comando, esperando que ele saia.
- Enquanto o comando está em execução, o script é atualizado e a parte alterada é após os 256 bytes já lidos.
- Quando o comando bash estava em execução, ele continua lendo o arquivo, retomando de onde estava, obtendo bytes de 256 a 511.
- Essa parte do script mudou, mas o bash não sabe disso.
Quando isso se torna ainda mais problemático é que se você editar qualquer coisa antes do byte 256. Digamos que você apague algumas linhas. Em seguida, os dados no script que estava no byte 256 estão agora em algum outro lugar, digamos, no byte 156 (100 bytes anteriores). Por causa disso, quando o bash continuar lendo, ele obterá o que era originalmente 356.
Este é apenas um exemplo. Bash não necessariamente lê 256 bytes de cada vez. Eu não sei exatamente o que lê de cada vez, mas isso não importa, o comportamento ainda é o mesmo.