Кросплатформенные приколы в MacOs

Очень грустно когда одни и те же консольные команды в разных операционных системах ведут себя по разному, особенно когда приходится разрабатывать приложения для широкого круга ОС, пусть даже на основе Linux. Столкнулся с разным поведением команд в MacOs, прекрасно работающих в CentOs иDebian.

Различие sed в MacOs и CentOs

Возможно различий существует больше, но лучше не использовать флаг -i, который сохраняет результат выполнения команды в тот же файл, из которого было произведено чтение.

Описание в CentOs:

-i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)

Описание в MacOs:

-i extension
   Edit files in-place, saving backups with the specified extension.
   If a zero-length extension is given, no backup will be saved. It
   is not recommended to give a zero-length extension when in-place
   editing files, as you risk corruption or partial content in situ-
   ations where disk space is exhausted, etc.

Как видите, на разных платформах флаг -i имеет различающийся функционал. Поэтому лучше использовать более платформо-независимый вариант:

sed -e "s/1/2/" myfile > tmp && mv tmp myfile

Различия chown и chmod в MacOs и CentOs

В CentOs и Debian для рекурсивной смены владельца файлов, директорий, а также установки прав доступа одинаково успешно выполнятся следующие команды:

chown 1000:1000 -R app
chown -R 1000:1000 app
chmod 755 -R app
chmod -R 755 app

Однако, MacOs сильно поругается на те, где флаг -R идёт после [OWNER][:[GROUP]] и MODE[,MODE].