web-dev-qa-db-fra.com

Comment rediriger la sortie vers l'écran ainsi que vers un fichier?

Mon objectif est de consigner toutes les sorties d'un script dans un répertoire que le script va créer.

Par exemple, j'ai:

~/.abc.sh:

#! /bin/bash
Rails new myapp

Quand je cours ...

cd ~/code
. ~/.abc.sh

... qui créera une nouvelle application Rails dans le répertoire ~/code/myapp.

Lorsque Rails crée une application, elle génère beaucoup de texte que je souhaite capturer et stocker dans un fichier journal du même répertoire que la commande Rails récemment créée. Je souhaite également afficher ce texte dans le terminal.

Comment puis-je faire cela?

10
Zabba

Vous pouvez utiliser la commande tee pour cela:

command | tee /path/to/logfile

L'équivelent sans écrire à la coquille serait:

command > /path/to/logfile

Si vous souhaitez ajouter (>>) et afficher le résultat dans le shell, utilisez l'option -a:

command | tee -a /path/to/logfile

Veuillez noter que le tube n'acceptera que stdout. Les erreurs de stderr ne sont pas traitées par le tube avec tee. Si vous voulez enregistrer les erreurs (de stderr), utilisez:

command 2>&1 | tee /path/to/logfile

Cela signifie: lancez command et redirigez le flux stderr (2) vers stdout (1). Cela sera transmis au tube avec l'application tee.

21
Lekensteyn