cmdA || cmdB
Фрагмент cmdB означает «Запустить cmdA
и, если он не работает (завершается с кодом выхода, отличным от 0), запустить cmdB
».
С https://stackoverflow.com/q/3224878/4482039: двоеточие :
в bash это команда, которая ничего не делает.
Таким образом, rm -r node_modules || :; ...
фрагмент может быть интерпретирован как:
- Запустите
rm -r node_modules
.
- Если это не удается (поскольку файл / каталог
node_modules
не существует или у нас нет прав), ничего не предпринимайте (игнорируйте ошибку)
- Запустите остаток строки.
Это способ игнорировать ошибки, потому что в этом случае ошибки ожидаются. В частности, для rm
этот способ более безопасен, чем флаг -f
поскольку он не заставляет удалять файлы, которые rm
обычно отказывается удалять.