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.txtde 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.txtaurait 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.txtsortie de ce fichier serait dateajouté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.