Известные встроенные команды, которые работают по-разному в Linux и Mac
При разработке сценариев Bash иногда я запускаю его в контейнере Docker или на виртуальной машине для его тестирования, но для меня идеальным местом для создания сценариев является только моя локальная рабочая станция MacOS.
Когда дело доходит до скриптов Bash, это никогда не было проблемой до сих пор. Однако сегодня я заметил, что date
Команда ведет себя по-разному между Linux и MacOS.
Пример сценария, добавление дней к объекту даты:
Linux:
root@host$ date -d "$(date) 3 days" +%Y-%m-%d
2018-04-20
MacOS:
WS:tmp user$ date -d "$(date) 3 days" +%Y-%m-%d
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Не работает, поэтому я должен переформатировать его:
WS:tmp user$ date -j -v +3d -f "%Y-%m-%d" $(date +%Y-%m-%d) +%Y-%m-%d`
2018-04-20
Какая боль! Простой bash-скрипт, и теперь мне нужен контейнер или виртуальная машина, чтобы просто манипулировать датами.
Это заставляет меня чувствовать себя так, будто я стреляю в ногу, разрабатывая этот способ, и единственная причина, по которой я приобрел Mac, заключается в том, что он гораздо ближе к среде 'nix, чем любая версия Windows, поэтому я мог заниматься простой локальной разработкой на нем.
Мои вопросы):
- Это проблема лицензирования? Я так понимаю
date
утилита GNU, поэтому проблем с лицензированием быть не должно. - Поскольку до сегодняшнего дня я еще не сталкивался с этой проблемой, существует ли известный список распространенных приложений, которые ведут себя по-разному?
- Является ли "плохой практикой" разработка некоторых скриптов bash на Mac? Я занимаюсь этим уже некоторое время и никогда не сталкивался с проблемой до сих пор.
Ваш опыт работы с этой темой приветствуется, спасибо!
1 ответ
Как вы обнаружили, в разных ОС будут установлены разные инструменты. Если вашей основной задачей является разработка сценариев для чего-то вроде Debian или Cent OS, я настоятельно рекомендую вам использовать эту среду для этого. Будь то виртуальная машина, облачный VPS или контейнер Docker - решать только вам.
В большинстве случаев поведение одинаково между macOS и различными дистрибутивами Linux, но не всегда.
Кроме того, вы можете использовать такие инструменты, как brew brew, для установки основных версий инструментов, а не специфичных для macOS. Это очевидно имеет другие предостережения, так как инструменты, которые перекрывают инструменты в macOS, не связаны по умолчанию, и вам придется их переопределить, но это выполнимо (это может сломать вещи, поэтому будьте осторожны). Вы также можете скомпилировать их самостоятельно.
Я не в курсе списка различий между Linux и macOS. Это также зависит от того, с какой версией Linux вы хотите сравнить ее.