Qual è lo scopo di PATH?
È come la tua shell trova i programmi. Quando digiti ls
, ad esempio, è in esecuzione un programma chiamato ls
che vive /bin
sulla maggior parte dei sistemi, incluso Mac OS X. La tua shell può trovarlo solo perché /bin
è in PATH
.
La shell cerca i programmi in PATH
ordine, da sinistra a destra. Se ci sono due ls
programmi sul tuo sistema e le loro directory sono entrambe nella tua PATH
, troverà quella nella directory elencata per prima nella tua PATH
.
Qual è la differenza tra / etc / percorsi e ~ / .bash_profile
I percorsi impostati /etc/paths
vengono aggiunti PATH
all'avvio in tutte le shell su Mac OS X.
~/.bash_profile
è solo uno dei numerosi script di shell eseguiti da Bash all'avvio e molti di questi sono specifici di Bash. Pertanto, se si modifica la shell - viene fornito anche Mac OS X tcsh
e zsh
, ad esempio, le modifiche apportate /etc/bashrc
non si applicano alla nuova shell.
Inoltre, /etc/paths
è un file di configurazione a livello di sistema, mentre ~/.bash_profile
è per utente. Se hai installato più utenti interattivi sul tuo Mac, non vorrai aggiungere directory a /etc/paths
cui non vuoi apparire in tutti PATH
. Lo stesso vale per /etc/bashrc
, tranne quello che ovviamente si applica solo agli utenti che usano Bash come shell.
Qual è la differenza tra PATH e $ PATH e $ {PATH}?
Solitamente vedi la variabile senza il sigillo quando stai impostando la variabile. FOO=bar
imposta la FOO
variabile di ambiente sulla stringa bar
. Se digiti set
, la shell ti mostra tutte le variabili d'ambiente e in quel caso vedi anche la variabile senza alcun sigillo.
$PATH
e di ${PATH}
solito sono intercambiabili. Dicono alla shell di espandere sul posto PATH
il valore della variabile corrente . La differenza ha a che fare con come e dove li usi. Per esempio:
$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx
$ echo ${FOO}x
barx
Nel secondo echo
comando, la shell non stampa nulla perché chiede alla shell di stampare una variabile chiamata FOOx
, che non esiste; la shell tratta le variabili inesistenti come vuote. Poiché il terzo echo
utilizza la sintassi del parentesi graffa, consente alla shell di vedere che si sta richiedendo la FOO
variabile e che x
è solo un altro carattere che si desidera stampare immediatamente dopo.
A proposito, c'è un altro modo per ottenere lo stesso effetto senza parentesi graffe:
$ echo "$FOO"x
barx
Le variabili di ambiente vengono espanse tra virgolette doppie e le virgolette separano l' x
espansione della variabile in modo che la shell faccia la cosa giusta.
Sto usando la FOO
variabile d'ambiente qui solo per chiarezza. Tutto ciò che ho scritto sopra si applica anche a PATH
, dal momento che è solo un'altra variabile d'ambiente. I testi di esempio sarebbero solo molto più lunghi.
Cosa significa esportazione PERCORSO? Quando esportiamo?
Prendendo l' FOO
esempio sopra , se dovessi eseguire un altro programma, non vedrebbe la FOO
variabile perché non viene esportata. Vive solo all'interno di quell'istanza di shell:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
Quando eseguo per la prima volta una nuova bash
shell sotto quella che stavo già utilizzando, quindi provo a mostrare il valore di FOO
, ottengo uno spazio vuoto perché FOO
non è stato esportato per i programmi secondari da vedere. Quindi sono uscito dalla seconda bash
istanza, l'ho esportato, eseguito di bash
nuovo e ora la seconda istanza vede il valore di FOO
.
Usi export
quando vuoi che i sottoprogrammi vedano i valori impostati nella shell e non lo usi quando non vuoi che ciò accada.
In genere, non esporto variabili temporanee negli script di shell, perché non voglio che cambino il comportamento dei programmi eseguiti da quello script di shell.
Non risponderò a nessuna delle tue altre domande. Dovresti solo fare una domanda alla volta. Ho risposto solo a molti perché sono vagamente imparentati. Tutto il resto appartiene a una domanda separata.