[BSD] port log

Zahemszky Gábor Gabor at Zahemszky.HU
2004. Május. 12., Sze, 09:11:30 CEST


Adam Szilveszter wrote:
> Hali!
> 
> On Tue, May 11, 2004 at 11:03:57PM +0200, Marton Fabo wrote:
> 
>>Bocs, hogy akadekoskodok, de egy nem interaktiv dolognal, mint a make, 
>>miert jo a "script"-tel elmenteni a kimenetet? Illetve, mennyivel jobb, 
>>mint mondjuk siman "tee"-vel file-ba kuldeni?
> 
> 
> Semmivel. De miert ne lehetne ugyanazt a dolgot tobbfelekeppen
> megoldani? :-)

Még egy apróság:
sh/ksh/bash és egyéb, a POSIX-shell szintaxisát használó shellekben ez 
az egyetlen hivatalos módszer arra, ha a stdout-ot és stderr-t is 
ugyanoda akarom eltárolni:

$ parancs > kimenet 2>&1
(illetve persze lehet az átirányítások sorrendjét megfordítani)
$ parancs 2> kimenet >&2

csh/tcsh (és ezen szintaxisu shellek esetén) csak ez az egyetlen 
megoldás van:

% parancs >& kimenet

No most ezzel szemben ha nemcsak fájlba akarom pakolni, hanem látni is 
akarom, az sh-ban:

$ parancs 2>&1 | tee kimenet

ezzel szemben csh-ban

% (parancs >& /dev/stdout ) | tee kimenet

Ez viszont feltételezi a /dev/stdout nevű fájl rendszerbeli meglétét, 
ami mondjuk BSD-kben létező valami, de nem minden UNIX(-like) 
rendszerben létezik.

Ezzel szemben a script eléggé sztenderd UNIX eszköz. És persze vérbeli 
BSD-s nem bánjta a root shelljét, ami évtizedek óta /bin/[t]csh :-)

No jó, befogtam.

Zahy < Gabor at Zahemszky dot HU >

-- 
#!/bin/ksh
Z='21N16I25C25E30, 40M30E33E25T15U!' ;IFS=' ABCDEFGHIJKLMNOPQRSTUVWXYZ 
';set $Z ;for i { [[ $i = ? ]]&&print $i&&break;[[ $i = ??? 
]]&&j=$i&&i=${i%?};typeset -i40 i=8#$i;print -n ${i#???};[[ "$j" = ??? 
]]&&print -n "${j#??} "&&j=;typeset +i i;};IFS=' 0123456789 ';set $Z;for 
i { [[ $i = , ]]&&i=2;[[ $i = ?? ]]||typeset -l i;j="$j $i";typeset +l 
i;};print "$j"



További információk a(z) BSD levelezőlistáról