Entfernen der integrierten Befehlszeilen-Dienstprogramme aus PATH, zsh

Okay, ich bin ein Linux-Power-User, das heißt, ich fühle mich am wohlsten, wenn ich Zugriff auf die Befehlszeile habe, und ich bin sehr daran gewöhnt, GNU-Coreutils zu verwenden, also habe ich jetzt GNU-Coreutils installiert Mac OS X mit Homebrew, wie würde ich vorgehen, um die integrierten Coreutils zu entfernen, mit denen Vanilla Mac OS X geliefert wird?

Bitte denken Sie daran, dass ich zsh verwende. Wenn ich also den Pfad auf etwas setze, mache ich es so:

path=(/usr/local/bin ~/.gem/ruby/2.0.0/bin ~/.nvm/bin ~/bin /bin $path)

Ich möchte sagen können,

Alles, was im aktuellen Pfad vorhanden ist, in den neuen Pfad einbeziehen, mit Ausnahme dieser Dateien: /usr/bin/ls, /usr/bin/grep...

Antworten (2)

Fügen Sie Ihrem Pfad Folgendes hinzu, um die OS X-Tools durch Homebrew Coreutils zu ersetzen:

$(brew --prefix coreutils)/libexec/gnubin

Per zsh-Syntax…

path=($(brew --prefix coreutils)/libexec/gnubin $path)
heißt das nicht nur: brew install everything from now on in 'coreutils'Das ist nicht wirklich das, was ich will. Ich möchte etwas, das sagtinclude everything in '/usr/bin' EXCEPT for this list of files
@AlexejMagura Das Hinzufügen $(brew --prefix coreutils)/libexec/gnubinzu Ihrem bestehenden Pfad bedeutet, dass jedes GNU-Tool das relevante Tool in /usr/bin ersetzt. Wenn es in GNUs bin nicht existiert, wird es /usr/bin verwenden.
scheint nicht zu funktionieren. Das Hinzufügen zum Pfad bewirkt nichts, selbst wenn ich es nach hinzufüge $path.
@AlexejMagura Das Hinzufügen nach Ihrem aktuellen Pfad (dh $PATH) funktioniert definitiv nicht - es sucht in der in Ihrem $PATH angegebenen Reihenfolge, daher muss der GNU-Bin entweder der allererste Eintrag in $PATH oder zumindest vor einem sein Speicherort, den Sie überschreiben möchten.

Erstens möchten Sie keines der von Apple bereitgestellten Befehlszeilentools entfernen, es sei denn, Sie möchten ein instabiles / unbrauchbares System. In der traditionellen Unix/Linux-Manier können Sie jedoch Ihre Pfadangabe so einrichten , dass /usr/local/binsie zuerst überprüft wird, sodass die dort installierten Dienstprogramme (Standard für Homebrew) vorher verwendet werden /usr/bin(oder /bin). Das verbleibende Problem liegt in Shell-Skripten - Sie müssen explizit sein, da sie Ihren $PATH ignorieren können.