J'utilise habituellement
./aaa.sh 2>&1 | tee -a log
Mais trouvé une nouvelle commande qui semble plus facile:
./aaa.sh &> log
Alors qu'est-ce que j'abandonne dans le second cas?
bash
pipe
io-redirection
tee
ajax_velu
la source
la source
tee
est de dupliquer l'entrée. Si l'objectif n'est pas de dupliquer l'entrée, n'utilisez pastee
.tee
nom est intéressant car il fonctionne comme un raccord de tuyau en "T" , c’est-à-dire 1 entrée - 2 sorties. Cela est même indiqué dans la page de manuel.Réponses:
Pommes et oranges. Mais d'abord ...
En ce qui concerne
2>&1
vs&>
, ils agissent tous les deux pour diriger stderr au même endroit où stdout est dirigé.Mais vous abandonnez la portabilité avec le second car il n’est pas compatible POSIX et tout script l’utilisant ne fonctionnera que avec les shells qui le prennent en charge.
Cela étant dit, ils sont "sémantiquement équivalents" comme décrit sur la page de manuel Bash ...
Cependant, il y a plus que ça. Vous utilisez également la
tee
commande qui ajoute des fonctionnalités supplémentaires à la première version. Il prendra son entrée stdin et le dirigera vers deux endroits différents: stdout (généralement votre écran / terminal si vous l'exécutez de manière interactive) et le fichier spécifié auquel les données seront ajoutées (-a
dit d'ajouter plutôt que d'écraser).Comparez cela à la deuxième version où la combinaison stdout et stderr écrase le
log
fichier et ne s'affiche pas sur votre écran / terminal.Conclusion: Comme mentionné au début ce sont vraiment deux commandes tout à fait différentes mais, stretching la notion d'équivalence, d'une manière générale la première version est supérieure car il est portable et vous obtenez l'avantage de voir la sortie
aaa.sh
même si elle est en cours d' enregistrement à un fichier. Bien sûr, si vous ne voulez pas voir cela ou si vous voulez effacer le contenu du fichier précédent, alors c'est une autre histoire. Pommes et oranges.la source
tee
est que l'impression à la fois à l'écran et au fichier.Deux choses:
tee
imprime son entrée à la fois dans le fichier nommé et dans la sortie standard, en pratique sur votre terminal. Une redirection directe similaire>
ou&>
uniquement à l'origine de l'écriture du fichier.tee -a
ajoute au fichier nommé, une redirection>
ou l’&>
écrase. Utilisez>>
ou&>>
ou>> file 2>&1
pour ajouter une redirection.la source