[Vyřešeno] Návratové hodnoty příkazů před pipe?

Dobrý den, ahoj,

Netušítě někdo jak v shellu spustit program tak aby:
 - jeho výstup šel na obrazovku
 - zároveň jeho výstup přesměrovat do log souboru
 - a ještě zachytit jeho návratovou hodnotu?

něco jako
Kód: [Vybrat]
#!/bin/sh
date | tee soubor.log
if [ $? -ne 0 ]; then
    echo "ERROR: Příkaz date neexistuje."
else
    echo "OK: Předcházející řádek obsahuje aktuální datum."
fi

Problém je že příkaz za rourou (tee) přepíše návratovou hodnotu příkazu před rourou (date).

Děkuji za jakékoli nasměrování (ale suché fungující řešení uvítám víc).
  W

PS: Myslím, že je to docela pěkný programátorský oříšek a klidně by se mohl hodit jako "hádanka dne" ((-:
« Poslední změna: 29. 07. 2010, 07:10:35 od Jan Vodolan »


Jaro

Re: Jak poslat výstup na konzoli a do souboru naráz?
« Odpověď #1 kdy: 28. 07. 2010, 17:13:49 »
V bashi mas premenu PIPESTATUS kde sa zaznamenavaju jednotlive
navratove kody vsetkych spustenych prikazov v rure.
Kód: [Vybrat]
date | tee log
echo ${PIPESTATUS[*]}

dustin

Re: Jak poslat výstup na konzoli a do souboru naráz?
« Odpověď #2 kdy: 28. 07. 2010, 17:14:01 »
Built-in příkaz bashe wait PID vrátí výsledek procesu PID. S tím bys to měl dát dohromady. Jenom vždycky bojuji s nastavováním globálních proměnných v podprocesech (třeba právě v pipových řetězcích), aby ses k tomu PIDu vůbec dostal.

dustin

Re: Jak poslat výstup na konzoli a do souboru naráz?
« Odpověď #3 kdy: 28. 07. 2010, 17:15:01 »
V bashi mas premenu PIPESTATUS kde sa zaznamenavaju jednotlive
navratove kody vsetkych spustenych prikazov v rure.
Kód: [Vybrat]
date | tee log
echo ${PIPESTATUS[*]}

Jo tak to je pěkný, díky moc.

Re: Jak poslat výstup na konzoli a do souboru naráz?
« Odpověď #4 kdy: 28. 07. 2010, 18:04:17 »
Super, děkuji moc.
PIPESTATUS je přesně to co jsem potřeboval ((-:
W