Shell-Befehle von OS X durch die Linux-Versionen ersetzen?

Shell-Befehle von OS X durch die Linux-Versionen ersetzen?

Die standardmäßig im Terminal von OS X verfügbaren Befehle scheinen sich nicht wie ihre Linux-Versionen zu verhalten. Wie kann ich sie alle durch die tatsächlichen GNU-Linux-Befehle ersetzen?

Beispielsweise erfordert sed -i ein lästiges zusätzliches ""-Argument. Außerdem funktioniert es nur mit Textdateien. Das ist nutzlos.

Antwort1

Im Allgemeinen können Sie nicht (odersollte nicht) ersetzen die Standardbefehle überhaupt nicht. Der Grund dafür ist, dass viele Systemadministrationsskripte und Pakete von Drittanbietern wahrscheinlich auf diese Befehle angewiesen sind, um sich unter OS X so zu verhalten, wie sie es standardmäßig tun.

Wenn Sie also einfach die Systembefehle löschen und durch GNU-Äquivalente mit inkompatiblem Verhalten oder Befehlszeilenargumenten ersetzen, wird wahrscheinlich etwas kaputt gehen. Insbesondere, wenn Sie Software verwenden, die auf Mac OS X „portiert“ wurde, obwohl sie ursprünglich für Linux oder BSD entwickelt wurde, da diese Art von Programmen eher auf Shell-Skripte und Systembefehle angewiesen ist als auf den Aufruf von OS X-APIs.

Was dudürfenSie können eine Umgebung installieren, die die GNU-Dienstprogramme in einem anderen Verzeichnis installiert, ohne die Standardeinstellungen zu überschreiben, und dannPassen Sie Ihre PATHUmgebungsvariable anso dass Befehlen im GNU-Verzeichnis Vorrang eingeräumt wird, bevor die Systemverzeichnisse durchsucht werden. Sie können dies so einrichten, dass Ihr PATH nur dann auf diese Weise festgelegt wird, wenn Sie eine interaktive Shell starten. Sie können googeln, wie das geht, bashoder eine andere Frage auf SU stellen (oder danach suchen, da sie wahrscheinlich schon einmal gestellt wurde), wenn Sie dies tun möchten.

Ein Beispiel für eine solche Umgebung istSelbstgebrautesdas zum Beispiel GNU sedund andere Dinge enthält. Sobald Sie Homebrew installiert haben, können Sie

brew install coreutils

und installieren Sie dieGNU Coreutils. Diese stellen Ihnen sed, date, printf, wcund viele andere Tools zur Verfügung, die mit GNU/Linux, aber nicht mit OS X ausgeliefert werden. Um jedoch die Standard-OS-X-Binärdateien nicht zu „überschreiben“, werden sie gstandardmäßig mit dem Präfix versehen. Wenn Sie also nach der Installation der Coreutils GNU sed verwenden möchten, geben Sie ein

gsed

Wenn Ihnen das jedes Mal zu mühsam ist, können Sie ein „gnubin“-Verzeichnis zu Ihrem PATH hinzufügen und GNU sed einfach mit aufrufen sed. Sie müssen Folgendes zu Ihrem hinzufügen ~/.bash_profile:

PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"

Wenn Sie eine Linux-Umgebung von A bis Z (Kernel, X11, Syscall-Kompatibilität usw.) benötigen, müssen Sie Linux natürlich in einer virtuellen Maschine ausführen, wie z. B.VirtualBoxDies ist eine sichere Wahl, wenn Sie Software oder Skripte ausführen müssen, die für die Ausführung unter Linux entwickelt wurden.

Homebrew bietet Ihnen nur Kompatibilität für bestimmte Programmklassen, die kein Linux-spezifisches Verhalten erfordern. Beispielsweise inotifyist nur unter Linux verfügbar. drm(Der Direct Rendering Manager) ist nur unter Linux verfügbar. Es gibt einige andere Systemaufrufe auf eher niedriger Ebene, die nur unter Linux verfügbar sind und für die es unter OS X kein Äquivalent gibt. Daher kann das Portieren bestimmter Programme von Linux auf OS X ohne erhebliche Codeänderungen unpraktisch oder unmöglich sein.

Antwort2

Sie könnten einGentoo-Präfixdas OS X unterstützt, können Sie dies tun, indem SieBootstrapping durchführenund fügen Sie dann die relevanten Pfade im Präfixverzeichnis zu Ihrem PATH hinzu. Möglicherweise erledigt dies dies bereits für Sie. Nachdem Sie dies getan haben, können Sie Standard-Gentoo-Befehle zum Installieren von Paketen verwenden.

emerge coreutilserhalten Sie beispielsweise die Standard-GNU-Dienstprogramme.

Bitte beachten Sie, dass Gentoo standardmäßig kompiliert. Sie könnenRichten Sie einen Binärhost einPORTAGE_BINHOST="... your url here ..."stattdessen. Dabei wird einfach eine der URLs aus der zweiten Hälfte des Artikels verwendet und in ./etc/make.confIhr Präfix eingefügt .

Antwort3

Als Follow-up zu @allquixotics Beitrag sind hier die offiziellen Anweisungen probrew install coreutils

Alle Befehle wurden mit dem Präfix „g“ installiert.

Wenn Sie diese Befehle wirklich mit ihrem normalen Namen verwenden müssen, können Sie Ihrem PATH von Ihrer bashrc aus ein "gnubin"-Verzeichnis hinzufügen, wie

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

Darüber hinaus können Sie auf ihre Manpages mit normalen Namen zugreifen, das Verzeichnis "gnuman" zu Ihrem MANPATH von Ihrem bashrc aus.

MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

Antwort4

In Bezug auf sedkönnen Sie eine vorkompilierte Binärdatei herunterladen von derRudixProjekt. Weitere RudixPakete finden Sie unterHierUndHier.

verwandte Informationen