[ksh] Ecrire dans STDERR sans redirection ?

Ecrire dans STDERR sans redirection ? [ksh] - Shell/Batch - Programmation

Marsh Posté le 21-10-2005 à 14:31:32    

Salut,
 
Connaissez-vous un moyen permettant d'écrire directement dans stderr mais sans redirection (une option magique d'echo ou de printf peut être) ?
J'ai un script qui en gros ressemble à ça:
 

LOGF=/root/$0.log
ERRF=/root/$0.err
 
[ -f $ERRF ] && rm $ERRF ; [ -f $LOGF && ] rm $LOGF
 
for host in `cat hosts.list`
do
   [...] qques commandes ping, scp, ssh sur $host [...]
done > $LOGF 2>$ERRF


Rien de bien particulier en fait. Mais j'aimerai dans la boucle do/done écrire des balises du genre "$host BEGIN" et "$host END" dans les deux fichiers log.
Une idée lumiseuse pour éviter d'avoir à rediriger le STDOUT et STDERR (cmd >$LOGF 2>$ERRF) de chaque commande de la boucle ?
Merci d'avance :hello:


Message édité par Deadlock le 21-10-2005 à 14:32:00

---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 21-10-2005 à 14:31:32   

Reply

Marsh Posté le 21-10-2005 à 15:53:02    

Bon ben j'ai trouvé entre temps ... je vous donne la (une) solution: utiliser print -u# ou #=output descriptor
 
Par défaut, print écrit sur STDOUT, donc #1

root@admhost:[/root]# print toto
toto
root@admhost:[/root]# print toto > /dev/null
root@admhost:[/root]#


Par contre en lui spécifiant -u2 il écrit sur #2 (STDERR)

root@admhost:[/root]# print -u2 toto
toto
root@admhost:[/root]# print -u2 toto > /dev/null
toto
root@admhost:[/root]# print -u2 toto 2>/dev/null
root@admhost:[/root]#

Bon weekend !


Message édité par Deadlock le 21-10-2005 à 15:54:26

---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 21-10-2005 à 17:20:43    

Met des "{ ... }" autour de ton boc, et redirige le tout vers stderr :

/home/nicolas $ echo toto; echo tata > /dev/null
toto
/home/nicolas $ { echo toto; echo tata; } > /dev/null

Reply

Marsh Posté le 21-10-2005 à 18:16:52    

Le problème est que j'ai besoin de séparer les erreurs et les outputs dans la boucle do/done. Mais dans cette même boucle je veux aussi mettre des balises dans les deux fichiers. Le print -u2 me permet de le faire.


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed