#!/bin/sh
...
echo $a"/"$b | bc -l
Szeretném magát az $a, $b-t is látni, nemcsak a végeredményt. Van valami olyan megoldás, amivel (a kiírás ismétlése nélkül) meg tudom jeleníteni a bc-nek átadandó karakterláncot? Valami "tee"-szerűség közbeiktatásra gondoltam, de az épp, hogy fájlba irányít.
- 1501 megtekintés
Hozzászólások
bocs, hogy beleoffolok, de kicsit temaba vag:
bash scriptben belul szeretnem elerni azt, hogy a file-ban levo kimenet menjen stdout-ra IS *es* egy logfile-ba IS.
valakinek van tippje? barhogy vakaroztam, vagy csak kulso file-ba ment, vagy csak stdout-ra.
exec + tee kulonbozo perverz kombinacioval probalkoztam.
a lenyeg, hogy a bash scripten belul szeretnem, nem pedig ugy, hogy mindenele egzotikus parametereket adok neki!
koszi
t
- A hozzászóláshoz be kell jelentkezni
Leírnád, hogyan használtad a tee parancsot (ez a rész egyébként hozzátartozna az alapvető hibaspechez is)? Csak mert sejthető, hogy rosszul, ui. az pont erre jó.
- A hozzászóláshoz be kell jelentkezni
tegyuk fel, van egy bash scriptem, az egszeruseg kedveert pl egy date parancsot futtatna.
tehat ./akarmi.sh-ra azt szeretnem, ha a benne levo date parancs kimenete latszodna stdout-on es az akarmi.log file-ban is.
a legutolso verziom ez volt:
{
date
} | tee akarmi.log, de ennel szerintem van szebb is.
t
- A hozzászóláshoz be kell jelentkezni
most talaltam valamit, nem tudom, mennyire elegans:
$ cat tee.sh
#!/bin/bash
exec 2>&1 > >(tee logfile)
date
ez igy szepen tolja ugy, ahogy szeretnem. van ennel szebb?
- A hozzászóláshoz be kell jelentkezni
A konkrét példádból értettem meg, hogy nem csak egyes parancsokat, hanem a teljes szkript tartalmának eredményét szeretnéd átirányítani.
Mindkét megoldásod valid, és szebbet nem tudok, legfeljebb mást, egy harmadikat:
function do_everything {
cmd1
cmd2
...
}
do_everything 2>&1 | tee $mylogfile
- A hozzászóláshoz be kell jelentkezni
oke, koszonom!
szerintem maradok ennel:
exec > >(tee whatever.log)
t
- A hozzászóláshoz be kell jelentkezni
$ cat tee.sh
#!/bin/bash
exec 2>&1 > >(tee logfile)
date
date >&2
$ bash tee.sh
Thu Jun 28 15:45:09 CEST 2012
Thu Jun 28 15:45:09 CEST 2012
$ cat logfile
Thu Jun 28 15:45:09 CEST 2012
exec 2>&1 > >(tee logfile)
helyett
exec > >(tee logfile) 2>&1
Ha jól értem, amit akarsz.
- A hozzászóláshoz be kell jelentkezni
A stdout ugye pont az, amit a bc elkap, de miért nem jó a stderr, ha "csak" debuggolni szeretnél?
echo "1 + 2" | tee /dev/stderr | bc -l
1 + 2
3
- A hozzászóláshoz be kell jelentkezni
Ez így tökéletes, köszi.
- A hozzászóláshoz be kell jelentkezni
Naon szsen.
- A hozzászóláshoz be kell jelentkezni