Que se passe-t-il lorsque cette commande est exécutée?
PATH =$PATH:`pwd`
Erreur: Rien ne se produit lorsque j'exécute la commande dans le terminal.
Si vous exécutez la commande dans votre question, vous devriez recevoir un message d'erreur:
$ PATH =$PATH:`pwd`
bash: PATH: command not found
Si l'espace est une faute de frappe, et que vous exécutez ceci:
PATH=$PATH:`pwd`
Ensuite, cela ajoutera le répertoire en cours (pwd
est une commande qui affiche le chemin du répertoire en cours, et `pwd`
sera remplacé par la sortie de pwd
) à la variable PATH
pour la durée de votre session Shell en cours (util vous fermez le terminal ). Pour illustrer:
$ pwd
/home/terdon/foo ## I am in /home/terdon/foo
$ echo $PATH ## the current PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ PATH=$PATH:`pwd`
$ echo $PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/terdon/foo
Notez comment le répertoire en cours, /home/terdon/foo
, a été ajouté à la fin de la variable PATH
.
En ce qui concerne votre commande initiale, réponse de terdon couvre déjà très bien ce qui se passe et ce qui devrait se passer. Analysons cela légèrement plus en détail.
Ce que vous essayez de faire est une affectation de variable, qui devrait prendre la forme de:
varName=value
Cependant, à cause de l'espace, il s'agit d'une commande PATH
avec un argument de ligne de commande consistant en un =
puis le contenu de la variable $PATH
et une substitution de commande de pwd
name__, le tout étant associé à la même chaîne:
PATH =$PATH:`pwd`
Bien sûr, il n’existe pas de commande telle que PATH
name__, vous aurez donc une erreur.
Shell traite les commandes simples et leurs arguments en tant que liste d'un ou de plusieurs jetons séparés par des espaces (avec éventuellement une affectation de variable optionnelle avant). En d'autres termes, le formulaire devrait être:
[VAR=value] Word [arg1 [arg2 [arg3] ]...]
Bien sûr, ce n'est pas ce qui est souhaité dans ce cas.
Donc, ce qui aurait dû être fait est le suivant:
PATH=$PATH:`pwd`
Ici, nous avons une affectation de variable appropriée, où, conformément à l'ordre d'expansion , bash
Shell commence par développer les variables, c'est-à-dire, remplace $PATH
par tout ce que vous avez dans cette variable, puis effectuez une substitution de commande à l'endroit où il s'exécute. pwd
et le remplace par la sortie de pwd
name__. En fin de compte, tout ce qui est attribué à la variable PATH
name__.
Quelques observations clés:
$PATH
, mais vous devez généralement éviter tout comportement indésirable. Voir Quand un double devis est-il nécessairePATH
est utilisée par Shell pour rechercher des commandes, et l'ordre des répertoires de cette liste définit la priorité selon laquelle les commandes seraient recherchées. Ainsi, par exemple, lorsque vous exécutez une commande, le shell vérifie d’abord si elle est intégrée ; dans le cas contraire, il examinera tous les répertoires de la variable PATH
name__. La PATH=$PATH:$(pwd)
ferait en sorte que Shell traverse tout le reste, et seulement ensuite accéder au répertoire fourni par pwd
name__. Par contre, PATH=$(pwd):$PATH
lancera la recherche à partir du répertoire renvoyé par pwd
name__. Donc, l'ordre de la mission est important.