Quelqu'un peut-il expliquer ce que signifie cette commande?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Quelqu'un peut-il expliquer ce que signifie cette commande?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Réponses:
${GZIP_BINDIR-'/bin'}
est un bash
modèle d'expansion des paramètres. De 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.
Immédiatement avant cette partie, la page de manuel contient (merci à @jwodder de l'avoir notifié):
Omitting the colon results in a test only for a parameter that is unset.
Comme l'indique la page de manuel, elle définira la valeur par défaut de la variable GZIP_BINDIR
. Si GZIP_BINDIR
une valeur a déjà été définie (autre que null car vous n'utilisez pas :
), cette valeur sera utilisée, sinon /bin
sera utilisée comme valeur de la variable GZIP_BINDIR
.
D'un autre côté, si vous souhaitez également tester les valeurs nulles, utilisez ce modèle (inclure :
):
${GZIP_BINDIR:-'/bin'}
Après cela, le $PATH
sera étendu aux valeurs qu'il détenait auparavant. Donc, si PATH
précédemment:
/usr/sbin:/usr/bin
Maintenant, votre PATH
volonté (compte tenu du fait qu'elle GZIP_BINDIR
n'est pas définie):
/bin:/usr/sbin:/usr/bin
export PATH
le rendra PATH
accessible à tous les processus enfants.
:-
indique: "Lorsque vous n'effectuez pas l'expansion de la sous-chaîne, en utilisant les formulaires documentés ci-dessous (par exemple :-), bash teste un paramètre non défini ou nul. Omettre les deux-points entraîne un test uniquement pour un paramètre non
PATH
et le export
dans une seule commande comme suit:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
N'y a-t-il vraiment pas de deux-points avant le trait d'union à l'intérieur de l'extension des paramètres ${GZIP_BINDIR-'/bin'}
?
Ce type de construction est presque toujours écrit avec deux points, comme dans ${GZIP_BINDIR:-'/bin'}
ce qui signifie, "si $ GZIP_BINDIR est NULL ou non défini, définissez-le sur '/ bin'"
Cependant, la syntaxe que vous avez fournie est valide, mais rare. ${GZIP_BINDIR-'/bin'}
(pas de deux-points) signifie, "si $ GZIP_BINDIR n'est pas défini, réglez-le sur '/ bin'". S'il est défini (a été déclaré) mais que rien ne lui est attribué (par exemple, il est NULL), rien ne sera inséré.
Il peut y avoir un bogue ici, car les deux points suivant la construction de la variable (...} :
$ PATH ...) seront toujours insérés si $ GZIP_BINDIR est défini mais NULL. Comme cela ajouterait deux points au début de $ PATH, cela entraînera la recherche dans le répertoire courant en premier.
Cela est considéré par la plupart comme un problème de sécurité car il facilite l'exécution d'un programme malveillant portant le même nom que les commandes standard simplement en le plaçant dans le répertoire en cours.
Pour laisser $ PATH inchangé si $ GZIP_BINDIR est défini mais NULL (vide), la syntaxe correcte serait ${GZIP_BINDIR-'/bin:'}$PATH; export PATH
Pour laisser $ PATH inchangé si $ GZIP_BINDIR est non défini ou est défini mais NULL, la syntaxe correcte serait ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
Cette commande met à jour la variable PATH.
La PATH
est une variable d'environnement spécifiant un ensemble de répertoires où se trouvent les programmes exécutables.
PATH="${GZIP_BINDIR-'/bin'}:$PATH";
Cela ajoute la valeur d'une autre variable GZIP_BINDIR
si vous quittez le PATH précédent sinon utilisez / bin à la place et ajoutez-le à PATH
export PATH
l'exportation est utilisée pour définir le CHEMIN disponible pour tous les processus enfants et sous-coquilles. Lisez ceci pour plus d'informations sur
Vous devez noter que ce n'est pas statique et que vous le perdrez une fois que vous aurez quitté votre shell.
Afin de rendre cette édition PATH permanente, vous devez ajouter ces lignes à votre .bashrc
gedit .bashrc
et ajoutez la ligne
export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
puis exécutez la commande
source .bashrc
:
dans${GZIP_BINDIR-'/bin'}
» Pas nécessairement.${parameter-word}
est également valide, mais ne semble pas figurer dans la page de manuel.