Qual è lo scopo di PATH?
È come la tua shell trova i programmi. Quando digiti ls, ad esempio, è in esecuzione un programma chiamato lsche vive /binsulla maggior parte dei sistemi, incluso Mac OS X. La tua shell può trovarlo solo perché /binè in PATH.
La shell cerca i programmi in PATHordine, da sinistra a destra. Se ci sono due lsprogrammi 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/pathsvengono aggiunti PATHall'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 tcshe zsh, ad esempio, le modifiche apportate /etc/bashrcnon 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/pathscui 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=barimposta la FOOvariabile 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.
$PATHe di ${PATH}solito sono intercambiabili. Dicono alla shell di espandere sul posto PATHil 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 echocomando, 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 echoutilizza la sintassi del parentesi graffa, consente alla shell di vedere che si sta richiedendo la FOOvariabile 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' xespansione della variabile in modo che la shell faccia la cosa giusta.
Sto usando la FOOvariabile 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' FOOesempio sopra , se dovessi eseguire un altro programma, non vedrebbe la FOOvariabile 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 bashshell sotto quella che stavo già utilizzando, quindi provo a mostrare il valore di FOO, ottengo uno spazio vuoto perché FOOnon è stato esportato per i programmi secondari da vedere. Quindi sono uscito dalla seconda bashistanza, l'ho esportato, eseguito di bashnuovo e ora la seconda istanza vede il valore di FOO.
Usi exportquando 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.