Quel est le but de & as in &>
et &>>
in bash?
Quel est le but de & as in &>
et &>>
in bash?
Réponses:
Ils sont tous deux connectés à la redirection E / S, comme expliqué ici .
Dans le cas de &>
, cela redirige la sortie standard (stdout) et la sortie d'erreur standard (stderr) vers un fichier. Par exemple, redirigeons la sortie de date vers un fichier comme celui-ci:
date &> foo.txt
Cela créerait ou écraserait un fichier portant le nom foo.txt
de la sortie date
. Et le contenu de ce fichier ressemblerait à ceci:
Sun Oct 4 22:37:58 EDT 2015
Mais dans le cas de &>>
cela, la sortie standard (stdout) et la sortie d'erreur standard (stderr) sont redirigées vers un fichier. Mais le >>
indique que le fichier désigné doit être ajouté et non écrasé s'il existe déjà.
Donc, si j'ai exécuté cette commande plusieurs fois de suite:
date &> foo.txt
Tout foo.txt
aurait jamais été la sortie de la dernière fois que cette commande a été exécutée puisque l'unique >
indique que le contenu du fichier serait écrasé à chaque exécution de la commande.
Mais si je lance cette commande >>
plusieurs fois de suite:
date &>> foo.txt
La foo.txt
sortie de ce fichier serait date
ajoutée comme suit:
Sun Oct 4 22:37:58 EDT 2015
Sun Oct 4 22:38:06 EDT 2015
Sun Oct 4 22:38:13 EDT 2015
Sun Oct 4 22:38:15 EDT 2015
Sun Oct 4 22:38:16 EDT 2015
Notez simplement que &>>
cela ne semble pas fonctionner dans Bash 3.x, mais fonctionne comme prévu dans Bash 4.x.
Considérons une commande appelée cmd
:
cmd &>filename
Ce qui précède envoie à la fois la sortie standard de la commande et son erreur standard filename
, en écrasant tout ce qui se trouvait auparavant dans ce fichier. Cela équivaut à:
cmd >filename 2>&1
Le &>>
formulaire est très similaire:
cmd &>>filename
Ceci ajoute les commandes stdout et stderr de cmd à tout ce qui était déjà dans le fichier filename
. Cela équivaut à:
cmd >>filename 2>&1
Vous pouvez en savoir plus à ce sujet dans man bash
.