Nel caso generale, non è possibile (o non si dovrebbe ) sostituire affatto i comandi predefiniti. Il motivo è che molti script di amministrazione del sistema e pacchetti di terze parti probabilmente si basano su questi comandi per comportarsi come sono pronti all'uso su OS X.
Quindi, se cancelli semplicemente i comandi di sistema e li sostituisci con equivalenti GNU che hanno comportamenti incompatibili o argomenti della riga di comando, probabilmente romperà qualcosa. Soprattutto se si utilizza un software che è stato "portato" su Mac OS X dopo essere stato originariamente progettato per essere eseguito su Linux o BSD, poiché questi tipi di programmi hanno maggiori probabilità di fare affidamento su script di shell e comandi di sistema rispetto alla chiamata di API OS X.
Quello che puoi fare è installare un ambiente che installa i programmi di utilità GNU in un'altra directory senza sovrascrivere i valori predefiniti e quindi regolare la PATH
variabile di ambiente modo che dia la priorità ai comandi trovati all'interno della directory GNU prima ancora di cercare nelle directory di sistema. Puoi collegarlo in modo tale da impostare il tuo PERCORSO in quel modo solo se stai avviando una shell interattiva; puoi google come farlo bash
o fare un'altra domanda su SU (o cercarla, dal momento che probabilmente è stata posta in precedenza) se vuoi farlo.
Un esempio di tale ambiente è l' homebrew che ad esempio ha GNU sed
tra le altre cose. Dopo aver installato Homebrew, puoi digitare
brew install coreutils
e installa GNU Coreutils . Questi vi fornirà sed
, date
, printf
, wc
e molti altri strumenti forniti con GNU / Linux, ma non OS X. Tuttavia, in modo da non binari OS X di default "override", saranno preceduti dal prefisso g
di default. Quindi, dopo aver installato Coreutils, se si desidera utilizzare GNU sed, digitare
gsed
Se questo è troppo fastidioso da digitare ogni volta, puoi aggiungere una directory "gnubin" al tuo PATH e chiamare GNU sed con sed
. Dovrai aggiungere quanto segue al tuo ~/.bash_profile
:
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
Ovviamente, se hai bisogno di un ambiente Linux dalla zuppa alle noci (kernel, X11, compatibilità syscall, ecc.) Dovrai eseguire Linux in una macchina virtuale, come VirtualBox . Questa è una scommessa sicura se è necessario eseguire software o script progettati per essere eseguiti su Linux.
Homebrew ti garantirà la compatibilità solo per alcune classi di programmi che non richiedono un comportamento specifico di Linux. Ad esempio inotify
è disponibile solo su Linux. drm
(Direct Rendering Manager) è disponibile solo su Linux. Esistono altre chiamate di sistema di livello piuttosto basso che sono disponibili solo su Linux e per le quali non esiste un equivalente su OS X, pertanto il porting di determinati programmi da Linux a OS X può essere impraticabile o impossibile senza significative modifiche al codice.