У загальному випадку ви взагалі не можете (або не повинні ) замінювати команди за замовчуванням. Причина полягає в тому, що багато сценарії системного адміністрування та сторонні пакети, ймовірно, покладаються на ці команди, щоб вони поводилися так, як вони роблять поза коробки в OS X.
Тож якщо ви просто стерте системні команди та заміните їх на еквіваленти GNU, які мають несумісну поведінку чи аргументи командного рядка, це, ймовірно, щось порушить. Особливо, якщо ви використовуєте якесь програмне забезпечення, яке було "перенесено" на Mac OS X після того, як він був спочатку розроблений для роботи на Linux або BSD, оскільки ці типи програм швидше покладаються на сценарії оболонки та системні команди на відміну від виклику API OS X.
Що ви можете зробити, це встановити середовище, яке встановлює утиліти GNU в інший каталог, не перезаписуючи параметри за замовчуванням, а потім відрегулювати PATH
змінну середовища так, щоб вона надавала пріоритет командам, знайденим у каталозі GNU, перш ніж вона навіть шукатиме системні каталоги. Ви можете зв’язати це так, щоб він встановлював лише ваш PATH таким чином, якщо ви запускаєте інтерактивну оболонку; ви можете google, як це зробити, bash
або задати інше запитання щодо SU (або шукати його, оскільки це, мабуть, вже задавались), якщо ви хочете це зробити.
Прикладом такого середовища є Homebrew, який, наприклад, має GNU sed
серед іншого. Після встановлення Homebrew ви можете вводити текст
brew install coreutils
і встановити GNU Coreutils . Це забезпечить вам sed
, date
, printf
, wc
і багато інших інструментів , які поставляються з GNU / Linux, але не OS X. Тим НЕ менше, щоб не «скасовують» ОС по замовчуванням X виконавчі файли, вони будуть з префіксом g
за замовчуванням. Отже, після установки Coreutils, якщо ви хочете використовувати GNU sed, введіть
gsed
Якщо це занадто багато клопоту щоразу набирати, ви можете додати каталог "gnubin" у свій PATH та просто зателефонувати з GNU sed sed
. Вам потрібно буде додати наступне ~/.bash_profile
:
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
Звичайно, якщо вам потрібне середовище Linux від супу до горіхів (ядро, X11, сумісність syscall тощо), вам доведеться запустити Linux у віртуальній машині, наприклад VirtualBox . Це безпечна ставка, якщо вам потрібно запустити програмне забезпечення або сценарії, розроблені для роботи в Linux.
Homebrew надасть вам сумісність лише для певних класів програм, які не вимагають поведінки, характерної для Linux. Наприклад inotify
, доступний лише в Linux. drm
(Менеджер прямого рендерінгу) доступний лише в Linux. Існують деякі інші досить низькі рівні системних викликів, які доступні лише в Linux, і для яких немає жодного еквівалента в OS X, тому перенесення певних програм з Linux на OS X може бути непрактичним або неможливим без значних змін коду.