La creazione di un collegamento simbolico in / bin non funziona


8

Ho provato tre modi diversi per creare un collegamento simbolico a Sublime Text sul mio Mac e, dopo aver riavviato ogni volta il terminale, continua a dirmi che il comando non è stato trovato. Sto usando un Mac con Yosemite (OSX Yosemite, 10.10). Come posso creare un collegamento simbolico in modo da poter aprire Sublime con il subcomando?

Uno

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

Due

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

Tre (senza virgolette)

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

il link crea effettivamente qualcosa in / bin chiamato sub? provare sudo?
chris

1
Se usi le virgolette, non vuoi la barra rovesciata. Se non usi le virgolette, la barra rovesciata è necessaria. Hai anche bisogno della barra iniziale /Applications/…, come sottolineato nella risposta, e hai bisogno dei privilegi di root per scrivere /bin(quindi sudo). La domanda residua è se sia sufficiente eseguire l'eseguibile in questo modo. Sei sicuro di non voler uno script di shell che fa qualcosa di simile open "/Applications/Sublime\ Text.app"al contenuto del file /bin?
Jonathan Leffler

Risposte:


16

Ti manca il carattere "/" all'inizio dell'app e sudocome /binè di proprietà di rootte e non puoi scriverlo come un normale utente. Dato che lo hai attualmente, funzionerebbe solo se la tua directory attuale fosse la radice del sistema. Ciò presuppone ovviamente che l'app Sublime Text sia nella cartella principale delle applicazioni.

Prova questo…

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

Un ripensamento: è considerato una cattiva pratica cambiare il contenuto di /bine /usr/binperché qualsiasi aggiornamento OS X in arrivo potrebbe cancellare il contenuto lì. /usr/local/binè il solito posto in cui installare i file binari forniti dall'utente, quindi

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

potrebbe essere l'opzione migliore.

Oppure (poiché probabilmente non è necessario eseguire Sublime Text da uno script di shell), è sufficiente definire un alias bash

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

che dovrebbe essere aggiunto al tuo file di avvio di bash per farlo aderire

echo "alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" >> ~/.bashrc

3
Devi usare sudoe se hai intenzione di citare il nome del percorso, non usare le barre rovesciate per sfuggire agli spazi!
user3439894

Non dimenticare le virgolette singole attorno al percorso: alias subl = '/ Applications / Sublime \ Text.app/Contents/SharedSupport/bin/subl' Inoltre, inseriscilo in ~ / .bash_profile
drct

1

In ritardo alla festa. Ho riscontrato lo stesso problema durante la configurazione del mio Mac e ho provato alcune cose. Ecco cosa ha funzionato per me.

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

Per ulteriori informazioni, consultare questo repository github .


A parte il fatto che il tuo comando fallirà, dal momento che non hai usato sudoed è richiesto in questo caso, come è diverso da ciò che è già stato offerto nella risposta di Mockman? A parte questo fatto che ha scelto di usare subvs. subl, in modo da digitare ripetutamente un carattere in meno per usarlo, non è davvero da quello che posso vedere!
user3439894

@ user3439894 sudo non è un requisito. E il comando sopra /usr/local/binnon utilizza /usr/bincome i comandi sopra. /usr/local/binè la directory consigliata per le applicazioni utente mentre / usr / bin viene usato per i programmi utente gestiti dalla distribuzione. Quindi, subvs nonsubl è l'unico cambiamento, dipende semplicemente dalle preferenze dell'utente; quello che vogliono scrivere. Mi scuso se provoca confusione.
LT

1. Eseguendo il tuo comando come da un account amministratore, restituisce ln: /usr/local/bin/subl: Permission denied2. Ti suggerirei di rileggere la risposta di /usr/local/bin/sudo ln -s
Mockman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.