Come eseguire gli script senza digitare il percorso completo?


56

Mi piacerebbe sapere se esiste un modo per eseguire script programma / shell senza digitare il percorso completo:

/opt/idea/bin/idea.sh

Puoi sempre fornire il percorso completo del file.
Muru,

Grazie @muru, questo lo so, ma è un programma che uso spesso, quindi vorrei essere in grado di eseguirlo con un semplice comando, non un lungo percorso di file.
Jonny,

Risposte:


60

Puoi semplicemente creare un collegamento simbolico . Crealo in /usr/local/bin. Tutto ciò che serve è eseguire il comando:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

Dopodiché dovresti rendere il tuo fileeseguibile:

chmod +x /full/path/to/your/file

Ora dovresti essere in grado di correre name_of_new_commandin qualsiasi momento nel tuo terminale.

Nota che questa è una buona soluzione solo per l'uso domestico di Linux.


11
Si noti che non è necessario posizionare un collegamento simbolico /usr/local/binche punti a uno script in una cartella home privata, ad esempio /home/jack/myscript.sh, poiché solo l'utente jackpotrebbe normalmente eseguirlo. Il collegamento simbolico sarà visibile per altri utenti, ma non per il file a cui punta. Su un sistema a utente singolo questo potrebbe non avere importanza, ma è comunque buona norma posizionare script (o collegamenti a script) in cui tutti gli utenti possono leggere /usr/local/bine script privati ​​(o collegamenti a script) di un singolo utente nella loro ~/bincartella.
Malte Skoruppa,

aggiungi un link simbolico in / usr / sbin / lo rende accessibile da qualsiasi luogo
Seyfi,

28

Puoi aggiungere /opt/idea/binalla tua PATHvariabile:

PATH=/opt/idea/bin:"$PATH"

Dopo questo puoi eseguirlo semplicemente idea.sh.

Probabilmente vuoi aggiungere questa linea nel tuo ~/.bashrcfile.


2
inoltre: se rendi eseguibile lo script, l'estensione .sh può essere lasciata da parte (supponendo che tu usi lo shebang nella parte superiore dello script). semplicemente "idea" è quindi sufficiente.
Jacob Vlijm

1
@Jacob: non puoi tralasciare l'estensione, poiché fa parte del nome del file dell'eseguibile (questo non è Windows, dove la magia del genere causa altri problemi). Per chiamare lo script con il nome idea, è necessario creare un collegamento o un alias con quel nome che punta allo idea.shscript.
Jonathan Callen

2
@JonathanCallen Callen sicuramente puoi! rendere eseguibile lo script, rimuovere l'estensione .sh sia dal nome file sia dal comando per eseguirlo, dato che si avvia lo script con shebang #! / bin / bash.
Jacob Vlijm

1
@Jacob quello che voglio dire è senza rinominare il file , non puoi (e sembra che questo sia parte di un pacchetto software più grande, quindi non dovresti semplicemente rinominare i file)
Jonathan Callen

2
Grazie @Jacob, nota che dice "Quando gli script sono installati in una directory nel sistema PATH" . Lo idea.shscript non è tale script, infatti spostarlo all'esterno della directory di installazione non è completamente supportato. Le regole di packaging Debian non si applicano qui.
Jan

15

Puoi creare una funzione nel tuo ~/.bashrc:

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

Oppure puoi creare un alias:

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

In entrambi i casi, puoi eseguirlo chiamando:

$ some-name

Se il file non dipende da dove è in esecuzione, considera di aggiungerlo al tuo ~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin

~/bin, se esiste, viene aggiunto $PATHautomaticamente al tuo . Quindi chiami direttamente file:

$ file

(Cattiva scelta del nome, considera di chiamarlo qualcosa di meno generico.)


@Oli dai sempre i miei cinque minuti, tendo ad aggiungere rientri. :) È solo fastidioso perché devo ingannare l'editor per usare Ctrl-K per i rientri di secondo livello.
Muru,

2
+1 in particolare per la soluzione da aggiungere fileal tuo ~/bin, che è quello che faccio di solito (per gli script più lunghi). Probabilmente l'avrei anche messo in cima :) Gli alias sono buoni per le scorciatoie per i comandi con determinati parametri, ad es alias l='ls -CF'. Anche se ho visto usi molto più fantastici di alias . Non tendo a dichiarare le funzioni in ~/.bashrc(preferisco avere tutti i miei script organizzati in file separati in ~/bin). Anche se tutto questo è una questione di gusti, immagino :)
Malte Skoruppa,

@MalteSkoruppa Ho appena dato la preferenza ai metodi che si prestano più facilmente cd, perché lo script può dipendere dalla directory di lavoro. :) Altrimenti, sì, tendo a mettere i file in ~/binme stesso.
muru,

10

Puoi creare un lanciatore usando il seguente comando:

gnome-desktop-item-edit --create-new <path-where-to-save>. Non aprirò questa finestra.

inserisci qui la descrizione dell'immagine

Assegnalo al nome che preferisci e nella casella di comando digita quanto segue

sh -c '/opt/idea/bin/idea.sh' e salvalo.

Ora puoi eseguire quel file usando il launcher appena creato

O

È possibile creare un file .desktop con i seguenti contenuti

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'

Ora salvalo con l' .desktopestensione in qualsiasi luogo.

Renderlo eseguibile con questo comando chmod a+x <your-desktop-file>

Ora fai doppio clic per aprirlo.


7

Possiamo definire una funzione e aggiungere un tasto di scelta rapida usando il bindcomando per chiamarla. Apri il ~/.bashrcfile e aggiungi questa riga:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'

Ora quando premi F12, il tuo programma verrà avviato.

Nota: un modo rapido per determinare il codice di escape:

Apri il tuo terminale e premi Ctrl+ V. Ora premi la tua scorciatoia da tastiera preferita. Dovrebbe apparire il codice di escape corretto. Assicurati di sostituirlo ^[con \eprima di aggiungere il collegamento a, ad esempio sostituirlo ^[[24~con \e[24~.


7

Possiamo anche eseguire il /opt/idea/bin/idea.shfile direttamente usandobash_aliases

Apri il ~/.bashrcfile eseguendo,

gedit ~/.bashrc

Rimuovi le #linee prima e salvale, in modo che le linee sembrino,

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Ora apri il ~/.bash_aliasesfile,

gedit ~/.bash_aliases

Aggiungi le righe seguenti in quel file e salvalo,

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

Finalmente il ~/.bashrcfile sorgente ,

source ~/.bashrc

Ora puoi eseguire il /opt/idea/bin/idea.shfile direttamente da,

idea

5

Oltre alle altre buone risposte, considera il collegamento simbolico ~/.local/bine l'aggiunta di questa directory al tuo PERCORSO (dall'interno del tuo .bashrcesempio). Questo metodo non richiede autorizzazioni speciali (diversamente dal collegamento simbolico a /usr/local/bin, ad esempio). In questo modo, potresti avere una struttura di directory standard senza inondare $ HOME. Maggiori informazioni al riguardo su queste https://unix.stackexchange.com/ domande:


1

Creane un soft link in /usr/bindirecotyr:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

Ora eseguilo usando:

idea.sh

0

Oppure puoi semplicemente usare

nano ~/.bashrc

e aggiungi

PATH=/full/path/to/file:"$PATH"

alla fine, quindi salva ed esci. Successivamente, puoi semplicemente digitare il nome del file.


0

Ho seguito tutte le risposte qui e in altri posti e così pochi non riescono a menzionare che potrebbe essere necessario disconnettersi affinché il comando funzioni alla fine.

Per ricapitolare, specialmente per Xubuntu , ma anche per altre varianti di Debian / Ubuntu ho scritto queste semplici istruzioni.

(nelle seguenti istruzioni usiamo la directory ~ / bin , perché è automaticamente un posto da dove questi SO cercano i comandi. Vedi qui :

Istruzioni a prova di errore per far funzionare il tuo comando:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
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.