В дополнение Stefan Hegny's helpful answer справочная информация:
https://docs.npmjs.com/misc/scripts От:
Сценарии запускаются при прохождении линии в качестве аргумента сценария к sh
.
Если сценарий завершен с кодом, отличным от 0, то это прервет процесс.
В частности, содержание целевого "scripts"
записи из файла package.json
передается sh -c
в качестве аргумента, так что командная строка эквивалент вашей команды будет:
sh -c 'diff <(ls dir1) <(ls dir2)'
который потерпит неудачу в Точно так же, потому что когда Bash вызывается как sh
, дизайн не признает process substitutions (<(...)
), потому что он работает в Режим совместимости POSIX.
процесс замена не части POSIX: они являются Башем конкретных расширения (также поддерживаются в zsh
и ksh
).
Для переносимости, вы должны всегда использовать POSIX-mandated shell features в ваших "scripts"
записей - если вы явно не вызвать определенную оболочку (как в ответ Стефана), либо непосредственно, либо путем вызова скрипта файл которого притон линия указывает оболочка для использования.
Различные оболочки действуют как sh
на разных платформах, и единственными функциями, на которые вы можете положиться, являются те, которые определены POSIX.
Также ноты, как ответ Стефана использует || exit 0
в конце команды Bash, с тем, чтобы гарантировать, что общее командование всегда передает код выхода 0
, чтобы убедиться, что npm
не прервать обработку.
Статус выхода может быть статусом выхода diff, который равен 1, если файлы или ваши входы различны, поэтому не обязательно ошибка? –