Cosa sono "$ PATH" e "~ / bin"? Come posso avere script personali?


29

Che cosa è $PATH?

Come posso avere comandi / programmi che sono disponibili solo per me?
Ho visto questo percorso ~/binmenzionato prima, ma a cosa serve e come lo uso?


Sto in qualche modo sperimentando perché si tratta di più FAQ o materiale wiki di una "vera domanda". È stato richiesto perché ho menzionato ~ / bin in una risposta precedente (nella barra laterale collegata a destra) e qualcuno ha commentato come aggiungerlo a PATH: ora invece di brevi commenti, possiamo collegarci a questo post quando ~ / bin è menzionato.

Risposte:


26

$ PATH è una variabile d'ambiente utilizzata per cercare i comandi. ~ È la tua directory home, quindi ~ / bin sarà / home / user / bin; è una directory normale.

Quando si esegue "ls" in una shell, ad esempio, si esegue effettivamente il programma / bin / ls; la posizione esatta potrebbe differire in base alla configurazione del sistema. Questo accade perché / bin è nel tuo $ PATH.

Per vedere il percorso e trovare dove si trova un comando particolare:

$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls     # searches $PATH for an executable named "ls"
/bin/ls
$ ls           # runs /bin/ls
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ /bin/ls      # can also run directly
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

Per avere la tua directory bin privata, devi solo aggiungerla al percorso. Fallo modificando ~ / .profile (un file nascosto) per includere le righe seguenti. Se le righe sono commentate, devi solo decommentarle; se sono già lì, sei pronto!

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
  PATH="$HOME/bin:$PATH"
fi

Ora è necessario creare la directory ~ / bin e, poiché .profile viene eseguito all'accesso e aggiunge ~ / bin solo se esiste in quel momento, è necessario accedere nuovamente per visualizzare il PERCORSO aggiornato.

Proviamolo:

$ ln -s $(which ls) ~/bin/my-ls   # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls          # lookup through $PATH
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ ~/bin/my-ls    # doesn't use $PATH to lookup
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

3
Una cosa a cui prestare attenzione quando si usa è che troverà solo comandi che sono binari nel filesystem, non riporta builtin, alias o funzioni della shell. Spesso, è più utile usare typeper vedere come un comando reale verrà risolto dalla shell; es: which echoe type echoriporterà cose diverse, whichrestituisce '/ bin / echo' ma 'type' restituisce che si tratta di una shell incorporata, che la shell preferirà al file in '/ bin'.
Steve Beattie,

@Steve Beattie, +1. whichè meglio sostituito da typeo commandin shell interattive ed è completamente inutile negli script.
geirha,

Una cosa da notare che ho appena notato: la $HOMEvariabile in $PATHper qualche motivo non funziona, cioè bisogna usare ~invece il segno.
Hi-Angel,

19

Per quanto riguarda ~/bine comandi / programmi disponibili solo per l'utente

Le versioni recenti di Ubuntu includono la ~/bindirectory nella tua $PATH, ma solo se la ~/bindirectory esiste.

Se non esiste:

  1. Assicurati che ~/.profilecontenga la seguente stanza (quella predefinita ~/.profilegià lo fa):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    
  2. Crea la ~/bindirectory:

    mkdir -p ~/bin
    
  3. Riavvia il computer o forza bash a rileggere ~/.profile:

    exec -l bash
    

Grazie per il exec -l bashsuggerimento "riavvio o ". Cosa fa la -lbandiera? Non sto trovando una spiegazione in man exec.
evanrmurphy,

3
exec -leseguirà bash come shell di login [ wiki.bash-hackers.org/commands/builtin/exec] . In breve, forza bash a rileggere /etc/profilee ~/.profile. Solo la corsa exec bashrileggerà solo ~/.bashrc.
Danilo Piazzalunga,
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.