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 bashmodello 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_BINDIRprecedenza è stato impostato un valore (diverso da null in quanto non utilizzato :), verrà utilizzato tale valore, altrimenti /binverrà 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 $PATHverrà espanso ai valori precedentemente contenuti. Quindi, se in PATHprecedenza aveva:
/usr/sbin:/usr/bin
Ora PATHsarai (considerando che GZIP_BINDIRnon è impostato):
/bin:/usr/sbin:/usr/bin
export PATHrenderà questo PATHdisponibile 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. "
PATHe la exportin 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_BINDIRse 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.