Come usare ln -s per creare un collegamento da riga di comando?


11

Ho un file sh che vorrei poter aprire dal terminale in qualsiasi momento. Vorrei digitare "studio" nel terminale e avere Android Studio aperto

Ricordo ln -sdi aver fatto questo, ma ho dimenticato e ho già perso molto tempo a cercare sul web.

Inoltre, in quale directory si trova il collegamento simbolico creato?

Ecco la sintassi del mio sforzo, comando non trovato

ricardo@debian:~$ ln -s /opt/android-studio/bin/studio.sh studio
ricardo@debian:~$ studio
bash: studio: command not found

provare ./studio.
Sebastian,

Voglio creare un collegamento a ./studio che posso aprire da qualsiasi luogo semplicemente digitando in studio o banana
rickyjoepr

Se si desidera eseguire lo script da qualsiasi luogo usando studioda solo, è necessario posizionare il collegamento in un luogo che viene cercato dalla shell. La shell cerca tutto dentro echo $PATH. È possibile modificare $PATHo inserire il collegamento in una delle directory di $PATH. Cosa preferisci?
Sebastian,

4
@Sebastian Utilizza le risposte per rispondere alle domande, non ai commenti. E per favore non suggerire di eliminare le domande dopo aver ricevuto risposta. Siamo qui per creare un repository di risposte che restano in giro e sono utili per i futuri visitatori.
Gilles 'SO- smetti di essere malvagio' il

1
Potrebbe piacerti il aliascomando, che viene comunemente usato invece di creare collegamenti simbolici per abbreviare i nomi dei comandi.
Winny,

Risposte:


10

Il comando eseguito ha creato un collegamento simbolico nella directory corrente. A giudicare dal prompt, la directory corrente è la home directory. La creazione di collegamenti simbolici a programmi eseguibili nella home directory non è particolarmente utile.

Quando si digita il nome di un programma, la shell lo cerca nelle directory elencate nella PATHvariabile d'ambiente . Per vedere il valore di questa variabile, eseguire echo $PATH. Le directory sono separate da due punti ( :). Un percorso tipico è /home/ricardo/bin:/usr/local/bin:/usr/bin:/binma ci sono molte varianti là fuori.

È necessario creare questo collegamento simbolico in una delle directory elencate in $PATH. Se vuoi rendere il comando disponibile a tutti gli utenti, crea il link in /usr/local/bin:

sudo ln -s /opt/android-studio/bin/studio.sh /usr/local/bin/studio

Se vuoi rendere il comando disponibile solo a te (che è l'unica possibilità se non hai i privilegi di amministratore), crea il link nella ~/bin( binsottodirectory della tua home directory).

ln -s /opt/android-studio/bin/studio.sh ~/bin/studio

Se la tua distribuzione non viene inserita /home/ricardo/binnella tua PATH(dov'è la /home/ricardotua home directory), creala prima con mkdir ~/bine aggiungila alla tua PATHaggiungendo la seguente riga a ~/.profile(crea il file se non esiste):

PATH=~/bin:$PATH

Il .profilefile viene letto quando si accede. È possibile leggerlo nel terminale corrente eseguendo . ~/.profile(questo si applica solo ai programmi avviati da quel terminale).


1
+1 ma come commento di Winny, penso che un alias in ~/.bashrcsarebbe più semplice.
Sparhawk,

@Sparhawk Un alias funzionerebbe solo per invocare il programma da una shell interattiva, non da uno script, un collegamento sul desktop o qualsiasi altro programma.
Gilles 'SO- smetti di essere malvagio' il

1
Vero, ma la domanda afferma I would like to type "studio" into the terminal, e questo è implicito dal titolo e dai comandi citati.
Sparhawk,

1

Il modo più intuitivo per realizzare il tuo desiderio è usare un alias. Genere:

alias studio=/opt/android-studio/bin/studio.sh

o inserisci un alias correlato in .profile o meglio: ciò che la tua shell usa come $ ENV.

Si noti che potrebbe essere ancora necessario aggiungere

/opt/android-studio/bin

al tuo PERCORSO per poter utilizzare il software. La cosa migliore è prima provare se funziona senza un PERCORSO esteso.

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.