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?
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
.