Copie stderr et stdout vers un fichier ainsi que l'écran en ksh
Je suis à la recherche d'une solution (similaire à la fête de code ci-dessous) pour copier les deux stdout et stderr dans un fichier en plus de l'écran à l'intérieur de ksh sur Solaris.
Le code suivant fonctionne très bien dans le shell bash:
#!/usr/bin/bash
# Clear the logfile
>logfile.txt
# Redirect all script output to a logfile as well as their normal locations
exec > >(tee -a logfile.txt)
exec 2> >(tee -a logfile.txt >&2)
date
ls -l /non-existent/path
Pour une raison quelconque, cela est en train de jeter une erreur de syntaxe sur Solaris. Je suppose que c'est parce que je ne peux pas faire le processus de substitution, et j'ai vu certains postes, ce qui suggère l'utilisation de mkfifo
, mais j'ai encore à venir avec une solution qui fonctionne.
Personne ne sait de façon à ce que tous sortie peut être redirigée vers un fichier en plus des emplacements par défaut?
OriginalL'auteur HuggieRich | 2012-08-22
Vous devez vous connecter pour publier un commentaire.
La version de ksh utilisez-vous? Le
>()
n'est pas pris en charge dans ksh88, mais est pris en charge dans ksh93 - la fête du code devrait fonctionner de la même (en dehors de la#!
ligne) sur ksh93.Si vous êtes coincé avec ksh88 (le pauvre!) ensuite, vous pouvez émuler le bash/ksh93 comportement à l'aide d'un tube nommé:
Ci-dessus est une deuxième version de permettre stderr pour être redirigé vers un autre fichier.
./script.sh >out.log 2>err.log
alors tous la sortie passe à l'extérieur.journal, mais certains devraient aller à l'err.journalOK, donc vous avez besoin d'un autre
tee
et pipe - modification de la réponse originale à cette question...Cette triés, excellent.
ksh dans Solaris 10 prend en charge les processus de substitution, mais apparemment il ne fonctionne pas pour
exec
Je suppose que le tee processus s'exécute jamais. Peut-être nous avons besoin d'un code de nettoyage, de tuer %tee effectué deux fois.
OriginalL'auteur cdarke
Comment à ce sujet:
Ajouter
-a
à latee
ligne de commande pour la suite des invocations pour ajouter plutôt que de les remplacer.Je devrais aussi mentionner que cela doit être fait à l'intérieur du script. J'ai un démon qui exécute le script, qui capture toutes les sorties vers un fichier de log, donc je n'ai pas de contrôle sur l'invocation sur la ligne de commande.
OriginalL'auteur twalberg
En ksh, le suivant fonctionne très bien pour moi
OriginalL'auteur JBat