Comment rediriger la sortie standard vers plusieurs fichiers journaux? Ce qui suit ne fonctionne pas:
some_command 1> output_log_1 output_log_2 2>&1
linux
io-redirection
tee
autobus à impériale
la source
la source
zsh
, vous pouvez utilisersome_command >output_log_1 >output_log_2
.Réponses:
Voir
man tee
:En conséquence:
la source
cmd 2>&1 | tee log1 log2
j'ai essayé de procéder comme ci-dessus, mais je dois appuyer sur ctrl-c pour le rediriger vers un deuxième fichier journal. le résultat est également imprimé sur la console. Je veux que la sortie de commande soit redirigée vers les journaux mais pas sur la console. toute aide est appréciée.tee
commande écritstdin
dans un fichier et aussi dansstdout
. Si vous ne voulez pas que la sortie apparaisse sur le terminal, vous devez rediriger/dev/null
comme vous le feriez normalement.echo test | tee --append file1 file2
Disons que votre sortie est générée à partir d'une fonction
cmd()
:Pour rediriger la sortie de
cmd
vers deux fichiers, mais pas vers la console, vous pouvez utiliser:Cela fonctionnera pour plusieurs fichiers, en fonction de la canalisation de source de données à prendre en compte:
Cela fonctionnera également:
Sans la
/dev/null
redirection, tee enverra une sortie à stdout en plus des fichiers spécifiés.Par exemple, s'il est exécuté à partir de la console, vous verrez la sortie à cet endroit. Exécuté depuis une crontab, le message d’état qui vous sera envoyé par la sortie apparaîtra (voir aussi la réponse de Gilles ici: https://unix.stackexchange.com/a/100833/3998 ).
Cela a fonctionné pour moi dans bash sur Ubuntu 12.04, et a été vérifié dans Ubuntu 14.04 avec GNU bash 4.3.11 (1), donc cela devrait fonctionner sur toute version récente de GNU bash.
la source
version 4.3.11(1)-release (i686-pc-linux-gnu)
) dans Ubuntu 14.04.C'est un ancien post mais je viens de le trouver maintenant ...
Au lieu de rediriger la sortie vers
> /dev/null
vous, vous pouvez le rediriger vers le dernier fichier:Ou pour ajouter la sortie:
la source
-a
en tee)Comme @jofel l'a mentionné dans un commentaire sous la réponse, cela peut être fait de manière native dans
zsh
:ou, avec expansion du corset:
En interne, cela fonctionne de manière très similaire aux
tee
réponses fournies ci-dessus. Le shell connecte la sortie standard de la commande à un processus qui dirige plusieurs fichiers; , il n'y a donc aucun avantage technique convaincant pour le faire de cette façon (mais il ne semble vraiment bien). Voir lezsh
manuel pour plus.la source
Incapable de commenter, cependant, une autre façon d'exprimer
Pourrait être simplifié à cela, quand on traite de nombreux fichiers.
la source
file1
parfile8
leurs noms et ceux qui sont probablement juste un exemple pour les noms des espaces réservés des fichiersJ'avais besoin d'un fichier journal de session et d'un autre fichier pour toutes les sessions que j'ai effectuées:
echo blabla |tee thisession >>allsessions
la source
tee
commande a déjà été mentionnée.