Почему `источник foo && true` выходит из сценария на баше?

Я использую:

hg addremove

для этого после удаления всего мусора из проверенного out каталог (или после того, как я добавил шаблоны в файл .hgignore ).
hg addremove -h сообщает вам:

Add all new files and remove all missing files from the repository.

Mercurial жалуется на * в имени файла. Это зарезервированный символ, который нельзя использовать в именах файлов в Windows. Однако само это сообщение отправляется на stderr и не должно влиять на работу каналов.

Альтернативным вариантом является использование:

hg remove --after

, который отмечает файлы, которые были удалены, но комментирует все файлы (те, которые все еще существуют, а также удаленные) и не реагирует на - quiet вариант.

1
21.08.2018, 03:22
1 ответ

sourceявляется псевдонимом команды точка ., а команда точка является так называемой special command, где POSIX описывает, что эти команды выходят из всей не -интерактивной оболочки в случае возникновения ошибки.

Если вы вызываете команду через:

bash test.sh

bash не выходит, но при вызове:

bash -o posix test.sh

он выходит. Таким образом, либо ваш bash был скомпилирован для совместимости с POSIX по умолчанию, либо вы вызвали другую оболочку, чем bash.

Стандарт см. в http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_14.

5
27.01.2020, 23:14

Теги

Похожие вопросы