Che cosa è $PATH
?
Come posso avere comandi / programmi che sono disponibili solo per me?
Ho visto questo percorso ~/bin
menzionato prima, ma a cosa serve e come lo uso?
Che cosa è $PATH
?
Come posso avere comandi / programmi che sono disponibili solo per me?
Ho visto questo percorso ~/bin
menzionato prima, ma a cosa serve e come lo uso?
Risposte:
$ 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 ...
type
per vedere come un comando reale verrà risolto dalla shell; es: which echo
e type echo
riporterà cose diverse, which
restituisce '/ bin / echo' ma 'type' restituisce che si tratta di una shell incorporata, che la shell preferirà al file in '/ bin'.
which
è meglio sostituito da type
o command
in shell interattive ed è completamente inutile negli script.
$HOME
variabile in $PATH
per qualche motivo non funziona, cioè bisogna usare ~
invece il segno.
Per quanto riguarda ~/bin
e comandi / programmi disponibili solo per l'utente
Le versioni recenti di Ubuntu includono la ~/bin
directory nella tua $PATH
, ma solo se la ~/bin
directory esiste.
Se non esiste:
Assicurati che ~/.profile
contenga la seguente stanza (quella predefinita ~/.profile
già lo fa):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Crea la ~/bin
directory:
mkdir -p ~/bin
Riavvia il computer o forza bash a rileggere ~/.profile
:
exec -l bash
exec -l bash
suggerimento "riavvio o ". Cosa fa la -l
bandiera? Non sto trovando una spiegazione in man exec
.
exec -l
eseguirà bash come shell di login [ wiki.bash-hackers.org/commands/builtin/exec] . In breve, forza bash a rileggere /etc/profile
e ~/.profile
. Solo la corsa exec bash
rileggerà solo ~/.bashrc
.