Umsetzung
- Gebräu installieren
Befolgen Sie die Anweisungen unter https://brew.sh/
- Installieren Sie das Paket coreutils
brew install coreutils
- Einen Alias oder Symlink erstellen
3a. Anlegen eines Alias (pro Benutzer)
Sie können Ihren Alias in ~/.bashrc, ~/.bash_profile oder an einem anderen Ort ablegen, an dem Sie Ihre Bash-Aliase zu speichern pflegen. Ich persönlich bewahre meine in ~/.bashrc auf
alias readlink=greadlink
3b. Erstellen Sie einen symbolischen Link (systemweit)
ln -s /usr/local/bin/greadlink /usr/local/bin/readlink
(Kredit: Izana)
Dadurch wird ein symbolischer Link in /usr/local/bin erstellt, während die ursprüngliche Readlink-Binärdatei erhalten bleibt. Es funktioniert, weil die Suche nach readlink 2 Ergebnisse liefert. Aber das zweite in /usr/local/bin hat Vorrang.
z.B.. which readlink
Um diese Änderung rückgängig zu machen, genügt es unlink /usr/local/bin/readlink
Zusätzliche Tools
Sie können ähnliche Aliase oder Symlinks für andere Coreutils wie gmv, gdu, gdf und so weiter erstellen. Aber seien Sie sich bewusst, dass das GNU-Verhalten auf einem Mac-Rechner für andere, die an die Arbeit mit nativen Coreutils gewöhnt sind, verwirrend sein kann oder sich auf Ihrem Mac-System auf unerwartete Weise verhalten kann.
Erläuterung
coreutils ist ein brew
Paket, das GNU/Linux-Kerndienstprogramme installiert, die der Mac OSX-Implementierung dieser Dienstprogramme entsprechen, so dass Sie diese verwenden können
Es kann sein, dass Sie auf Ihrem Mac OSX-System Programme oder Hilfsprogramme finden, die den Linux coreutils ("Core Utilities") ähnlich zu sein scheinen, sich aber in einigen Punkten unterscheiden (z.B. unterschiedliche Flags haben).
Das liegt daran, dass die Mac OSX-Implementierung dieser Werkzeuge anders ist. Um das ursprüngliche GNU/Linux-ähnliche Verhalten zu erhalten, können Sie die coreutils
Paket über das brew
Paketmanagementsystem.
Dadurch werden die entsprechenden Kerndienstprogramme installiert, denen das Präfix g
. Z.B. für readlink
finden Sie eine entsprechende greadlink
Programm.
Für die Herstellung von readlink
funktionieren wie die GNU readlink
( greadlink
), können Sie nach der Installation von coreutils einen einfachen Alias oder symbolischen Link erstellen.
1 Stimmen
Etwas spät, aber in Ihrer Frage fehlt ein Hinweis auf die von Ihnen verwendete Shell. Dies ist wichtig, denn
readlink
kann ein eingebauter oder ein externer Befehl sein.1 Stimmen
Das würde vielleicht den Unterschied erklären. Ich bin mir aber ziemlich sicher, dass ich bei beiden Gelegenheiten die Bash verwendet habe.
3 Stimmen
Warum ist diese Option auf Macs verboten?
0 Stimmen
@CommaToast - wenn ich mich recht erinnere, versuchen die Macs beim "Unix"-Teil des Betriebssystems, sich an POSIX- und/oder BSD-abgeleitete Tools und Dienstprogramme zu halten. Sie können GNU-Dienstprogramme auf OS/X installieren oder die Befehle so anpassen, dass sie eine "reine" Bourne-Shell verwenden (
/bin/sh
ohnebash
Erweiterungen). Für viele Entwickler sind heutzutage Shell-Skripte = Linux, GNU-Utilities undbash
so dass Probleme der Übertragbarkeit auftreten.5 Stimmen
Ich wünschte wirklich, Apple würde OS X dazu bringen, mehr Standard-Linux-Pfade zu unterstützen und sich um solche Dinge zu kümmern. Sie könnten es tun, ohne irgendetwas kaputt zu machen, oder?
1 Stimmen
@CommaToast Nun, sie werden mit Perl ausgeliefert, also ++ :-) ... öffnen Sie Terminal.app und geben Sie ein:
touch myfile ; ln -s myfile otherfile ; perl -MCwd=abs_path -le 'print abs_path readlink(shift);' otherfile
... in meinem Fall sehe ich: /Users/cito/myfile`. Ich habe es zu meiner Antwort unten hinzugefügt. Zum Wohl.1 Stimmen
@CommaToast GNU ist nicht Unix :-) Es wurde etwas hinzugefügt. Sie können eine Lösung mit
pwd -P
unter OS X, ohne etwas zu installieren1 Stimmen
@CommaToast
readlink
ist GPLv3 und Apple wird nichts anrühren, was unter der GPLv3 steht, da es erforderlich ist, einem Gerät kryptografische Schlüssel zu übergeben, um GPLv3-Software auf diesem Gerät zu ändern. gnu.org/licenses/ Das wird ein Grund dafür sein, dass die Standard-Shell nicht mehr Bash, sondern Zsh ist1 Stimmen
@JasonS aber FreeBSD hatte
readlink -f
seit irgendwann zwischen 2010 und 2012 abhängig vom Datum der Manpage und dem Datum der BSD-Veröffentlichung, und das ist keine GPL-Implementierung. Apple zögert also nur. Und tatsächlich,readlink -f
hat seinen Ursprung in OpenBSD 2.1 im Jahr 1997, soweit ich das beurteilen kann. Die erste Implementierung war also nicht einmal GNU. Ich kann verstehen, dass es nicht in Snow Leopard ist, aber ich kann nicht verstehen, dass es nicht in Mavericks/Sierra ist.0 Stimmen
@WyattWard Gutes Argument. Der einzige Mac, zu dem ich Zugang habe (10.11 Big Sur), hat das Datum des Readlinks von 2003. Also ja, es könnte aktualisiert werden. Und wie du sagst, nicht GPLv3 überhaupt, so ignorieren Sie meine früheren Kommentar über es GPLv3. Ich war ein bisschen blind, weil sich so viele Leute darüber beschwert haben, dass Mac OS nicht GNU ist. Nein, ist es nicht. Wird es auch nie sein. Aber der Punkt bleibt, dass man die Arbeit trotzdem erledigen kann mit
pwd -P
ohne zu wünschen, dass Mac OS ein GNU Linux ist, indem man Homebrew benutzt. Ja, Shell-Skripte sind nicht portabel. Das gilt nicht nur für Mac OS.4 Stimmen
MacOS 12.3 unterstützt
readlink -f
.