Qualcuno può spiegare cosa significa questo comando?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Qualcuno può spiegare cosa significa questo comando?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Risposte:
${GZIP_BINDIR-'/bin'}
è un bash
modello di espansione dei parametri. Da man bash
:
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise, the value of parameter
is substituted.
Immediatamente prima di questa porzione la pagina man ha (grazie a @jwodder per la notifica):
Omitting the colon results in a test only for a parameter that is unset.
Come dice la manpage, imposterà il valore predefinito della variabile GZIP_BINDIR
. Se in GZIP_BINDIR
precedenza è stato impostato un valore (diverso da null in quanto non utilizzato :
), verrà utilizzato tale valore, altrimenti /bin
verrà utilizzato come valore della variabileGZIP_BINDIR
.
D'altra parte, se si desidera verificare anche valori null, utilizzare questo modello (include :
):
${GZIP_BINDIR:-'/bin'}
Dopodiché il file $PATH
verrà espanso ai valori precedentemente contenuti. Quindi, se in PATH
precedenza aveva:
/usr/sbin:/usr/bin
Ora PATH
sarai (considerando che GZIP_BINDIR
non è impostato):
/bin:/usr/sbin:/usr/bin
export PATH
renderà questo PATH
disponibile a tutti i processi figlio.
:-
dice: "Quando non si esegue l'espansione di sottostringa, usando i moduli documentati di seguito (es. :-), bash testa un parametro non impostato o nullo. Omettere i due punti risulta in un test solo per un parametro non impostato. "
PATH
e la export
in un singolo comando come segue:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Non ci sono davvero due punti prima del trattino all'interno dell'espansione dei parametri ${GZIP_BINDIR-'/bin'}
?
Questo tipo di costrutto è quasi sempre scritto con due punti, come in ${GZIP_BINDIR:-'/bin'}
che "se $ GZIP_BINDIR è NULL o non è impostato, impostarlo su '/ bin'"
Tuttavia, la sintassi fornita è valida, ma rara. ${GZIP_BINDIR-'/bin'}
(senza due punti) significa "se $ GZIP_BINDIR non è impostato, impostarlo su '/ bin'". Se è impostato (è stato dichiarato) ma non è stato assegnato nulla (ad es. È NULL), non verrà inserito nulla.
Potrebbe esserci un bug qui, poiché i due punti che seguono il costrutto variabile (...} :
$ PATH ...) verranno comunque inseriti se $ GZIP_BINDIR è impostato ma NULL. Poiché ciò aggiungerebbe due punti all'inizio di $ PATH, per prima cosa verrà cercata la directory corrente.
Questo è considerato dalla maggior parte un problema di sicurezza in quanto semplifica l'esecuzione di un programma dannoso con lo stesso nome dei comandi standard semplicemente inserendolo nella directory corrente.
Per lasciare $ PATH invariato se $ GZIP_BINDIR è impostato ma NULL (vuoto), la sintassi corretta sarebbe ${GZIP_BINDIR-'/bin:'}$PATH; export PATH
Per lasciare $ PATH invariato se $ GZIP_BINDIR non è impostato o è impostato ma NULL, la sintassi corretta sarebbe ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
Questo comando aggiorna la variabile PATH.
Il PATH
è una variabile d'ambiente che specifica una serie di directory in cui si trovano i programmi eseguibili.
PATH="${GZIP_BINDIR-'/bin'}:$PATH";
Questo aggiunge il valore di un'altra variabile GZIP_BINDIR
se esci dal PATH precedente altrimenti usa / bin e lo aggiungi a PATH
export PATH
L'esportazione viene utilizzata per impostare il PERCORSO disponibile per tutti i processi secondari e i subshells Leggi questo per ulteriori informazioni su
Devi notare che questo non è statico e lo perderai una volta uscito dalla shell.
Per rendere permanente questa modifica del PERCORSO devi aggiungere queste righe al tuo .bashrc
gedit .bashrc
e aggiungi la linea
export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
quindi esegui il comando
source .bashrc
:
in${GZIP_BINDIR-'/bin'}
" Non necessariamente.${parameter-word}
è anche valido, anche se non sembra essere nella pagina man.