Die im Terminal in OS X standardmäßig verfügbaren Befehle scheinen sich nicht wie die Linux-Versionen zu verhalten. Wie kann ich sie alle durch die aktuellen GNU-Linux-Befehle ersetzen?
Zum Beispiel erfordert sed -i ein nerviges zusätzliches Argument. Es funktioniert auch nur mit Textdateien. Das ist sinnlos.
linux
macos
command-line
terminal.app
linux-terminal
Der Eine
quelle
quelle
-i
Flagge nicht dem Standard entspricht .ed
dient zum Bearbeiten von Dateien.Antworten:
Im Allgemeinen können (oder sollten ) Sie die Standardbefehle überhaupt nicht ersetzen. Der Grund dafür ist, dass viele Systemverwaltungsskripte und Pakete von Drittanbietern wahrscheinlich auf diese Befehle angewiesen sind, um sich so zu verhalten, wie sie es von Anfang an unter OS X tun.
Wenn Sie also nur die Systembefehle löschen und durch GNU-Äquivalente mit inkompatiblem Verhalten oder Befehlszeilenargumenten ersetzen, wird dies wahrscheinlich zu Problemen führen. Insbesondere, wenn Sie eine Software verwenden, die nach dem ursprünglichen Entwurf für Linux oder BSD auf Mac OS X "portiert" wurde, da diese Arten von Programmen eher auf Shell-Skripten und Systembefehlen beruhen als auf dem Aufrufen von OS X-APIs.
Sie können eine Umgebung installieren, in der die GNU-Dienstprogramme in einem anderen Verzeichnis installiert werden, ohne die Standardeinstellungen zu überschreiben, und dann Ihre
PATH
Umgebungsvariable so anpassen , dass sie den Befehlen im GNU-Verzeichnis Vorrang einräumt, bevor sie überhaupt die Systemverzeichnisse durchsucht. Sie können dies so verkabeln, dass Ihr PFAD nur dann auf diese Weise festgelegt wird, wenn Sie eine interaktive Shell starten. Sie können googeln, wie man das macht,bash
oder eine andere Frage zu SU stellen (oder danach suchen, da sie wahrscheinlich schon einmal gestellt wurde), wenn Sie das möchten.Ein Beispiel für eine solche Umgebung ist Homebrew, das zum Beispiel
sed
unter anderem GNU hat . Sobald Sie Homebrew installiert haben, können Sie eingebenund installiere die GNU Coreutils . Dies wird Ihnen mit
sed
,date
,printf
,wc
und viele andere Tools , dass Schiff mit GNU / Linux, aber nicht OS X. Allerdings, um nicht zu „überschreiben“ default OS X Binärdateien, werden sie mit dem Präfix werdeng
standardmäßig aktiviert . Wenn Sie also nach der Installation von Coreutils GNU sed verwenden möchten, geben Sie Folgendes einWenn dies zu umständlich ist, können Sie Ihrem PATH ein "gnubin" -Verzeichnis hinzufügen und GNU sed mit aufrufen
sed
. Sie müssen Folgendes zu Ihrer hinzufügen~/.bash_profile
:Wenn Sie eine Linux-Umgebung benötigen, die von Suppe bis Nuts reicht (Kernel, X11, Syscall-Kompatibilität usw.), müssen Sie Linux auf einer virtuellen Maschine wie VirtualBox ausführen . Dies ist eine sichere Sache, wenn Sie Software oder Skripte ausführen müssen, die für Linux entwickelt wurden.
Homebrew bietet Kompatibilität nur für bestimmte Programmklassen, für die kein Linux-spezifisches Verhalten erforderlich ist. Zum Beispiel
inotify
ist nur unter Linux verfügbar.drm
(der Direct Rendering Manager) ist nur unter Linux verfügbar. Es gibt einige andere eher einfache Systemaufrufe, 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 nach OS X ohne wesentliche Codeänderungen unpraktisch oder unmöglich sein.quelle
brew install coreutils
nicht enthaltensed
. Sie können diesbrew install gnu-sed
jedoch installierengsed
und nichtsed
, selbst wenn Sie Ihre aktualisieren$PATH
. Ich habe einen Symlink erstellt, um Macs auszublendensed
:ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sed
Sie müssen jedoch noch einen Link erstellen, umman gsed
die richtige Manpage anzuzeigen.brew install gnu-sed --default-names
Installiere es alssed
--default-names
können Sie mit den Befehlen mit dem Präfix g installieren und dann oh-my-zsh (sehr empfehlenswert) installieren und das Plugin gnu-utils aktivieren.Sie können ein Gentoo-Präfix verwenden, das OS X unterstützt, indem Sie es booten und dann die relevanten Pfade im Präfixverzeichnis zu Ihrem PATH hinzufügen. Es kann sein, dass dies bereits für Sie erledigt. Nachdem Sie dies getan haben, können Sie Standard-Gentoo-Befehle zum Installieren von Paketen verwenden.
emerge coreutils
erhalten Sie zum Beispiel die Standard-GNU-Utils.Bitte beachten Sie, dass Gentoo standardmäßig kompiliert. Möglicherweise möchten Sie stattdessen einen binären Host einrichten . Dies ist nur mit einer der URLs in der zweiten Hälfte dieses Artikels, und es bei der Platzierung
PORTAGE_BINHOST="... your url here ..."
in./etc/make.conf
in Ihrem Präfix.quelle
Im Anschluss an den Beitrag von @ allquixotic finden Sie hier die offiziellen Anweisungen per
brew install coreutils
quelle
In Bezug auf
sed
Sie können eine vorkompilierte Binärdatei aus demRudix
Projekt herunterladen . WeitereRudix
Pauschalen finden Sie hier und hier .quelle