Попробуйте это ... создайте файл с именем "bash-is-odd.sh":
#!/bin/bash
echo "echo yes i do odd things" >> bash-is-odd.sh
Это показывает, что bash действительно интерпретирует скрипт «по ходу дела». Действительно, редактирование долго выполняемого скрипта имеет непредсказуемые результаты, вставку случайных символов и т. Д. Почему? Поскольку bash читает с позиции последнего байта, редактирование смещает местоположение читаемого текущего символа.
Bash, одним словом, очень, очень небезопасен из-за этой "особенности". svn и rsync при использовании с bash-скриптами особенно беспокоят, потому что по умолчанию они "объединяют" результаты ... редактирование на месте. В rsync есть режим, который это исправляет. svn и git нет.
Я представляю решение. Создайте файл с именем "/ bin / bashx":
#!/bin/bash
source "$1"
Теперь используйте #! / Bin / bashx в своих скриптах и всегда запускайте их с "bashx" вместо bash. Это решает проблему - вы можете безопасно перезаписать ваши скрипты.
Альтернативное (действующее) решение, предложенное / протестированное @ AF7:
{
# your script
}
exit $?
Фигурные скобки защищают от изменений, а выход защищает от добавлений. Конечно, нам всем было бы намного лучше, если бы bash поставлялся с опцией, например, '-w' (весь файл) или чем-то, что делало это.