← Back to team overview

sslug-teknik team mailing list archive

Re: Usædvanlig(?) omdirigering af uddata

 

Henrik Christian Grove skrev:

> Jeg har et program (faktisk flere, men det er ligegyldigt) der
> producerer en del uddata på stdout og også lidt på stderr.
> 
> Jeg vil gerne kunne se det der kommer på stderr, men jeg vil
> samtidig gerne have begge dele ned i én fil, så jeg, hvis det bliver
> nødvendigt, kan komme til at se hvad der er sket på stdout lige op
> til fejlen (som rapporteres på stderr. Det betyder så også at begge
> dele skal skrives ned i filen løbende, så det er ikke godt nok at
> sende stdout til en fil og stderr til en anden og så sætte dem
> sammen bagefter.

Jeg satte mig og eksperimenterede lidt (i stedet for at kode et
rangordningsændringsberegningsprogram) med dit problem.  Følgende ser
ud til at løse opgaven:

   mkfifo log.pipe
   cat log.pipe >> log &
   (./rod 1>log.pipe) 2>&1 | tee log.pipe

hvor `./rod` er et program jeg skrev for at generere blandede uddata
til »stdout« og »stderr«:

   #! /bin/bash
   for count in $(seq 1 10); do
      sleep 1
      echo "err $(date +"%H:%M:%S")" 1>&2
      sleep 1
      echo "out $(date +"%H:%M:%S")"
   done
   exit -1

En mere realistisk prøve ville nok være at have en specifik aktivering
af en ekstern `kill` for at simulere et uønsket nedbrud af programmet.
Kortere tid mellem udskrifterne kan klares ved at udskrive en tæller i
stedet for et tidspunkt i hele sekunder.

God fornøjelse,

Jacob
-- 
"Very small. Go to sleep" -- monster (not drooling)


References