Das Erstellen eines symbolischen Links in / bin funktioniert nicht

8

Ich habe drei verschiedene Möglichkeiten ausprobiert, um auf meinem Mac einen symbolischen Link zu Sublime Text zu erstellen. Nach jedem Neustart des Terminals wird mir immer wieder mitgeteilt, dass der Befehl nicht gefunden wurde. Ich verwende einen Mac mit Yosemite (OSX Yosemite, 10.10). Wie kann ich einen symbolischen Link erstellen, um Sublime mit dem subBefehl zu öffnen ?

Eins

ln -s 'Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl' /bin/sub

Zwei

ln -s "Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" /bin/sub

Drei (keine Anführungszeichen)

ln -s Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /bin/sub
Michael
quelle
Erstellt der Link tatsächlich etwas in / bin namens sub? versuchen Sie es mit Sudo?
Chris
1
Wenn Sie Anführungszeichen verwenden, möchten Sie den Backslash nicht. Wenn Sie keine Anführungszeichen verwenden, ist der Backslash erforderlich. Sie benötigen auch den führenden Schrägstrich /Applications/…, wie in der Antwort angegeben, und Sie benötigen Root-Berechtigungen zum Schreiben /bin(daher sudo). Die verbleibende Frage ist, ob es ausreicht, die ausführbare Datei so auszuführen. Sind Sie sicher, dass Sie kein Shell-Skript möchten, das open "/Applications/Sublime\ Text.app"stattdessen so etwas wie den Inhalt der Datei ausführt /bin?
Jonathan Leffler

Antworten:

16

Sie vermissen das '/' am Anfang Ihrer App und sudoals /binEigentum von rootund können als normaler Benutzer nicht darauf schreiben. Wie Sie es derzeit haben, würde es nur funktionieren, wenn Ihr aktuelles Verzeichnis das Systemstammverzeichnis wäre. Dies setzt natürlich voraus, dass sich die Sublime Text-App in Ihrem Hauptanwendungsordner befindet.

Versuche dies…

sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /bin/sub

Ein nachträglicher Gedanke: Es wird als schlechte Praxis angesehen, den Inhalt von zu ändern, /binund /usr/binweil jedes bevorstehende OS X-Upgrade den Inhalt dort löschen kann. /usr/local/binist der übliche Ort, an dem vom Benutzer bereitgestellte Binärdateien installiert werden

[[ -d /usr/local/bin ]] || sudo mkdir /usr/local/bin
sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/sub

könnte die bessere Option sein.

Oder (da Sie Sublime Text wahrscheinlich nie in einem Shell-Skript ausführen müssen) definieren Sie einfach einen Bash-Alias

alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl

Dies sollte zu Ihrer Bash-Startdatei hinzugefügt werden, damit sie haftet

echo "alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" >> ~/.bashrc
Mockman
quelle
3
Sie müssen verwenden sudound wenn Sie den Pfadnamen zitieren möchten, verwenden Sie keine Backslashes, um Leerzeichen zu entkommen!
user3439894
Vergessen Sie nicht einfache Anführungszeichen um den Pfad: alias subl = '/ Applications / Sublime \ Text.app/Contents/SharedSupport/bin/subl' Setzen Sie das auch besser in ~ / .bash_profile
drct
1

Spät zur Party. Beim Einrichten meines Mac bin ich auf dasselbe Problem gestoßen und habe einige Dinge ausprobiert. Hier ist, was für mich funktioniert hat.

ln -sv "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

Weitere Informationen finden Sie in diesem Github-Repo .

LT
quelle
Abgesehen von der Tatsache, dass Ihr Befehl fehlschlägt, da Sie ihn nicht verwendet haben sudound er in diesem Fall erforderlich ist, wie unterscheidet sich dies von dem, was bereits in der Antwort von Mockman angeboten wurde? Abgesehen von der Tatsache, dass er sich für die Verwendung von subvs. entschieden hat subl, um wiederholt ein Zeichen weniger einzugeben, um es zu verwenden, ist es wirklich nicht das, was ich sehen kann!
user3439894
@ user3439894 sudo ist keine Voraussetzung. UND der obige Befehl wird /usr/local/binnicht /usr/binwie die obigen Befehle verwendet. /usr/local/binist das empfohlene Verzeichnis für Benutzeranwendungen, während / usr / bin für verteilungsverwaltete Benutzerprogramme verwendet wird. So subvs sublist nicht die einzige Veränderung, es hängt einfach von Benutzerpräferenz; was sie schreiben wollen. Ich entschuldige mich, wenn es Verwirrung stiftet.
LT
1. Wenn Sie Ihren Befehl so ln: /usr/local/bin/subl: Permission deniedausführen, wie er von einem Administratorkonto ausgeht , wird zurückgegeben. 2. Ich würde vorschlagen, dass Sie die Antwort von Mockman erneut lesen, wie sie /usr/local/bin/im zweiten sudo ln -sBefehl in seiner Antwort unbedingt enthalten ist !
user3439894