$Id: shell3.txt,v 1.3 2002-04-28 10:53:27+09 tomokuni Exp tomokuni $
$B%7%'%k$r;H$*$&(B
- $B1~MQJT(B -
lilo-bk
$BM'T"E/CK(B ([email protected])
# $B$3$NJ8=q$K$D$$$F(B
# $B$3$NJ8=q$NCx:n8"$OM'T"E/CK(B ([email protected]) $B$,M-$7$^$9!#(B
# $B$3$NJ8=q$O(B GNU $B%U%j!r7o$N2<$GJ#@=!"G[I[!"JQ99$9$k$3$H$,$G$-$^$9!#(B
#
# Copyright (c) 2002 Tetsuo Tomokuni All rights reserved.
# Permission is granted to copy, distribute and/or modify this document
# under the terms of the GNU Free Documentation License, Version 1.1
# or any later version published by the Free Software Foundation;
# with the Invariant Sections being LIST THEIR TITLES, with the
# Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
# A copy of the license is included in the section entitled "GNU
# Free Documentation License".
#
# GFDL $B$O(B LICENSE $B%U%!%$%k!"H$7$F$/$@$5$$!#(B
$B=jMW;~4V(B: 60 $BJ,(B($B/$7$G$b(B UNIX $B$NLLGr$5$,EA$o$l$P9,$$$G$9!#(B
Content
0 $B:#2s$NNcBj%9%/%j%W%H(B
1 $B%U%!%$%k%G%#%9%/%j%W%?$H%j%@%$%l%/%H(B/$B%Q%$%W(B
2 $B%k!<%WJ8$N%Q%$%W(B/$B%j%@%$%l%/%H=hM}(B
3 eval $B$rMQ$$$?O"A[G[Ns(B
4 trap $B$rMQ$$$?%7%0%J%k=hM}(B
5 $BNcBj%9%/%j%W%H$N2r@b(B
Acknowledgement
0 $B:#2s$NNcBj%9%/%j%W%H(B
(popcheck.sh)
1 $B%U%!%$%k%G%#%9%/%j%W%?$H%j%@%$%l%/%H(B/$B%Q%$%W(B
1.1 $B;EAH$_(B
$B%j%@%$%l%/%H$H%Q%$%W$N86M}5Z$SCm0UE@$O<!$NDL$j$G$"$k!#(B
- $B%j%@%$%l%/%H$h$j@h$K%Q%$%W$N%U%!%$%k%G%#%9%/%j%W%?=hM}$r9T$&!#(B
- $B:8$+$i=g$KI>2A$5$l$k!#(B
- dup2(2) $B$O%*%V%8%'%/%H$NJ#@=$r$9$k!#(B
- $B%Q%$%W$O%5%V%7%'%k$Gl9g(B($BEvA3$@$,(B)$B:G8eCJ$G$NJQ?tA`:n$N7k2L$,$=$N8e$bM-8z$G$"$k!#(B)
($BNc(B)
$ command >file
$BI8=`=PNO$,(B file $B$K=PNO$5$l$k!#(B
$ command 2>file
$BI8=`%(%i!<=PNO$,(B file $B$K=PNO$5$l$k!#(B
$ command >file 2>&1
$BI8=`=PNO$HI8=`%(%i!<=PNO$H$b$K(B file $B$K=PNO$5$l$k!#(B
$ command 2>&1 >file
$BI8=`=PNO$,(B file $B$K=PNO$5$l!"I8=`%(%i!<=PNO$OI8=`=PNO(B
($B$3$N>l9g$OC&1 | command2
$B$^$:(B command1 $B$NI8=`=PNO$,(B command2 $B$NI8=`=PNO$K%Q%$%W$G7k9g$5$l!"(B
$B$=$N8e%Q%$%W$NA0CJ$NI8=`=PNO$K(B command1 $B$NI8=`%(%i!<=PNO$,7k9g$5$l!"(B
$B7k2L$H$7$F(B command1 $B$NI8=`=PNO$HI8=`%(%i!<=PNO$,(B command2 $B$N(B
$BI8=`=PNO$K7k9g$5$l$k!#(B
1.2 $BI8=`%(%i!<=PNO$N$_$r%Q%$%W(B
$B%Q%$%W$N8eCJ$KI8=`%(%i!<=PNO$N$_$rEO$9$K$O$I$&$7$?$i$h$$$@$m$&$+!)(B
($BNc(B 1)
$ command1 2>&1 >/dev/null | command2
(1) $BI8=`=PNO$,%Q%$%W$G(B command2 $B$K@\B3(B
(2) $BI8=`%(%i!<=PNO$rI8=`=PNO$K%j%@%$%l%/%H(B
(3) ($B$b$H$b$H$N(B)$BI8=`=PNO$r(B /dev/null $B$K%j%@%$%l%/%H(B
$B7k2LE*$K(B
$B$b$H$b$H$NI8=`=PNO(B ... /dev/null $B$X(B
$B$b$H$b$H$NI8=`%(%i!<=PNO(B ... command2 $B$X%Q%$%W(B
$B$H$J$k!#(B
($BNc(B 2)
$ command1 3>&1 >/dev/null 2>&3 | command2
(1) $BI8=`=PNO$,%Q%$%W$G(B command2 $B$K@\B3(B
(2) $B%@%_!<(B($B%U%!%$%k%G%#%9%/%j%W%?(B 3 $BHV(B)$B$rI8=`=PNO$K%j%@%$%l%/%H(B
(3) ($B$b$H$b$H$N(B)$BI8=`=PNO$r(B /dev/null $B$K%j%@%$%l%/%H(B
(4) $BI8=`%(%i!<=PNO$r%@%_!<$K"*$=$N7k2LI8=`=PNO$K%j%@%$%l%/%H(B
$B7k2LE*$K(B
$B$b$H$b$H$NI8=`=PNO(B ... /dev/null $B$X(B
$B$b$H$b$H$NI8=`%(%i!<=PNO(B ... command2 $B$X%Q%$%W(B
$B%@%_!<(B(fd 3) ... $B%*!<%W%s$7$?$^$^(B($B%3%^%s%I=*N;8e%/%m!<%:(B)
$B$H$J$k!#(B
($BNc(B 3)
$ command1 3>&1 1>&2 2>&3 3>&- | command2
(1) $BI8=`=PNO$,%Q%$%W$G(B command2 $B$K@\B3(B
(2) $B%@%_!<(B($B%U%!%$%k%G%#%9%/%j%W%?(B 3 $BHV(B)$B$rI8=`=PNO$K%j%@%$%l%/%H(B
(3) ($B$b$H$b$H$N(B)$BI8=`=PNO$rI8=`%(%i!<=PNO$K%j%@%$%l%/%H(B
(4) ($B$b$H$b$H$N(B)$BI8=`%(%i!<=PNO$r%@%_!<$K"*$=$N7k2LI8=`=PNO$K%j%@%$%l%/%H(B
(5) $B%@%_!<(B($B%U%!%$%k%G%#%9%/%j%W%?(B 3 $BHV(B)$B$r%/%m!<%:(B
$B7k2LE*$K(B
$B$b$H$b$H$NI8=`=PNO(B ... $BCl9g$O!"(B
$B<!$N$h$&$K$9$k$H$h$$!#(B
$ stat=`exec 4>&1; { ping -c hoge 2>&1 4>&-; echo $? 1>&4; } | \
> more 1>&2 4>&-`; echo $stat
2 $B%k!<%WJ8$N%Q%$%W(B/$B%j%@%$%l%/%H=hM}(B
for $B$d(B while $BEy$N%k!<%WJ8$K$b%j%@%$%l%/%H$d%Q%$%W$,;H$($k!#(B
($BNc(B)
$ for i in *.txt; do echo $i; done > textfile.list
$B$?$@$7!"%7%'%k%9%/%j%W%HCf$N%k!<%WJ8$G%j%@%$%l%/%H$d%Q%$%W$r(B
$B;HMQ$7$?>l9g!"(B Bourne Shell $B$G$O$=$N%k!<%WJ8$,%5%V%7%'%k$G(B
$BA[(B PDP11 $B>e$N(B UNIX V7 $B$N(B /bin/sh $B$G3NG'(B)
($BNc(B 1) $B%j%@%$%l%/%H!"%Q%$%WL5$7(B
$ cat roop1.sh
n=0
while read line
do
n=`expr $n + 1`
echo "$n: $line"
done
echo "total line = $n"
$ ./roop1.sh < roop1.sh
1: n=0
2: while read line
3: do
4: n=`expr $n + 1`
5: echo "$n: $line"
6: done
7: echo "total line = $n"
total line = 7
$ cat roop1.sh | ./roop1.sh
1: n=0
2: while read line
3: do
4: n=`expr $n + 1`
5: echo "$n: $line"
6: done
7: echo "total line = $n"
total line = 7
($BNc(B 2) $B%j%@%$%l%/%H;HMQ(B
$ cat roop2.sh
n=0
while read line
do
n=`expr $n + 1`
echo "$n: $line"
done < $0
echo "total line = $n"
$ ./roop2.sh
1: n=0
2: while read line
3: do
4: n=`expr $n + 1`
5: echo "$n: $line"
6: done < $0
7: echo "total line = $n"
total line = 0
($BNc(B 3) $B%Q%$%W;HMQ(B
$ cat roop3.sh
n=0
cat $0 | while read line
do
n=`expr $n + 1`
echo "$n: $line"
done
echo "total line = $n"
$ ./roop3.sh
1: n=0
2: cat $0 | while read line
3: do
4: n=`expr $n + 1`
5: echo "$n: $line"
6: done
7: echo "total line = $n"
total line = 0
roop2.sh $B$d(B roop3.sh $B$N$h$&$J>l9g$K$b(B $n $B$rJ]B8$9$kJ}K!$O$"$k!#(B
$B$=$l$O(B exec $B$r;H$C$F%U%!%$%k%G%#%9%/%j%W%?$r@Z$jBX$($k$3$H$G(B
$BH(B)
($BCm0U(B)
$B:G6a$N(B Bourne Shell $B7O$N(B Shell (bash,zsh,ash) $B$O(B
$B99$K$3$l$i$H$O$A$,$&5sF0$r<($9$N$G!"$3$l$^$?MWCm0U$G$"$k!#(B
bash,sh(bash $B$X$N%j%s%/(B),ash,pdksh
... roop2.sh $B$N$_(B $n $B$,(B 7 $B$K$J$k(B
zsh ... roop2.sh, roop3.sh $B6&$K(B $n $B$,(B 7 $B$K$J$k(B
3 eval $B$rMQ$$$?O"A[G[Ns(B
bash $B$d(B zsh $BEy$K$O4{$KG[Ns$N5!G=$,Hw$o$C$F$$$k$,!"%*%j%8%J%k$N(B
Bourne Shell $B$G$O$=$N5!G=$O$J$$!#$7$+$7(B eval $B$r;H$&$3$H$GO"A[G[Ns(B
($B$^$,$$(B?)$B$,/$7?($l$?$,!"$3$N%9%/%j%W%HCf$NO"A[G[Ns$K3JG<$7$F$$$k(B
while $BJ8$KBP$7$F!"%Q%$%W$d%j%@%$%l%/%H$rMQ$$$k$H8eJ}$GJQ?t;2>H(B
$B$G$-$J$$$?$a$K!"(B 1 $B9TL\$G(B exec $B$r;H$C$F(B
(1) $B$^$:(B exec 3<&0 $B$G!"I8=`F~NO(B($B%U%!%$%k%G%#%9%/%j%W%?(B 0) $B$r(B
$B%U%!%$%k%G%#%9%/%j%W%?(B 3 $B$KJ#@=$9$k!#(B
(2) $B<!$K(B exec 0<H$G$-$k$h$&$K(B
$B$7$F$$$k!#(B
$B$^$?!"$3$NO"A[G[Ns$r3JG<$7$F$$$k(B while $BJ8$,=*$o$C$?D>8e$K!"(B
(3) exec 0<&3 $B$G!"(B($B$b$H$b$H$NI8=`F~NO$rJ#@=$7$F$$$?(B)$B%U%!%$%k(B
$B%G%#%9%/%j%W%?(B 3 $B$r%U%!%$%k%G%#%9%/%j%W%?(B 0 $B$KJ#@=$9$k$3$H$G!"(B
$BI8=`F~NO$,$b$H$KLa$k!#(B
(4) $B:G8e$K(B exec 3<&- $B$G;H$$=*$o$C$?%U%!%$%k%G%#%9%/%j%W%?(B 3 $B$rJD$8$k!#(B
$B$H$9$k$3$H$G!"$=$N8e$N%9%/%j%W%H$G1F6A$,$J$$$h$&$K$7$F$$$k!#(B
4 trap $B$rMQ$$$?%7%0%J%k=hM}(B
$B%9%/%j%W%HCf$K0l;~%U%!%$%k$r:n$k$3$H$O$h$/$"$k!#(B
$B$=$&$$$&>l9g$O!"%9%/%j%W%H$,=*N;$9$k$H$-$K$=$N0l;~%U%!%$%k$r(B
$B:o=|$9$k$h$&$K$9$k$,!"C1$K%9%/%j%W%H$N:G8e$G(B rm $B$7$F$$$k$@$1(B
$B$G$O!"0[>o=*N;$7$?>l9g(B($BNc$($P(B Ctrl-C $B$GCfCG$7$?$H$-Ey(B)$B$K(B
$B$=$N0l;~%U%!%$%k$,;D$C$F$7$^$&!#(B
$B$3$&$$$&>l9g$K$O0J2<$N$h$&$K(B trap $B%3%^%s%I$r;H$&$HJXMx$G$"$k!#(B
$ cat trap.sh
...
trap 'rm $tempfile; exit' 0 1 2 13 15
...
$B$3$&$7$F$*$/$H!"%9%/%j%W%HCf$G(B $tempfile $B$,:n@.$5$l$?8e$K(B
$B0[>o=*N;(B($B=*N;%3!<%I$,(B 1,2,13,15)$B$7$F$b(B($B$3$N>l9g$O(B 0 $B$,$"$k(B
$B$N$G@5>o=*N;$G$b(B)$B:G8e$K(B $tempfile $B$r>C5n$7$F=*$o$k$N$G!"(B
$B0l;~%U%!%$%k$,;D$i$J$$!#(B
$B$?$@$7>e$NNc$@$H=*N;%3!<%I$,(B 0,1,2,13,15 $B0J30$G$"$k$H$-$O(B
trap $B$7$F$$$J$$$N$G0l;~%U%!%$%k$O;D$C$F$7$^$&!#(B
($B$A$J$_$K(B 9 (KILL)$B$O(B trap $B$G$-$J$$(B)
5 $BNcBj%9%/%j%W%H$N2r@b(B
1 $B9TL\(B $B%7%'%k%9%/%j%W%H$r5/F0(B
3 $B9TL\(B $B$3$N%9%/%j%W%H$NL>A0(B
4 $B9TL\(B $B@_Dj%U%!%$%k(B
6-- 11 help $BMQ4X?t(B
13-- 27 $B%*%W%7%g%s=hM}(B
29 $B9TL\(B ($B%7%'%k%9%/%j%W%H$N%*%W%7%g%s$r0z?t$+$i=|5n(B)
30-- 31 $B%]!<%H(B,$B%&%(%$%H;~4V%G%U%)%k%H(B
33-- 68 $B@_Dj%U%!%$%kFI$_9~$_(B or $BL5$+$C$?$i(B exit
70-- 74 $B%Q%$%WMQ(B,$B%W%m%;%9DL?.MQL>A0$D$-(B FIFO $B:n@.(B(trap $B$K$h$k=*N;=hM}9~(B)
76--133 telnet $B$G(B popserver $B$K7R$$$G(B POP(APOP) $B%W%m%H%3%k$GDL?.(B
('|' $B$G%Q%$%W$r7R$$$G$$$k$N$G%5%V%7%'%k$GA0IU$-(B)$B%Q%$%W$G7R$$$G8eCJ=hM}(B('{}' $B$N$_$J$N$G%+%l%s%H%7%'%k(B)
240--254 $B%a%C%;!<%8I=<(?t(B
256--261 $B%5%V%8%'%/%HI=<((B
263 $B9TL\(B $B%9%/%j%W%H$N=*N;(B
76--133 $B$N(B {} $B$O(B '|' $B$G%Q%$%W$5$l$F$$$k$N$G!"%5%V%7%'%k$GA0IU$-%Q%$%W(B $pipefile $B$X(B
$B%j%@%$%l%/%H$7$F$*$/!#(B
$B$^$?!"%Q%$%W$N$NA0CJCf$G(B until $BJ8$G(B read $B$9$k:]$K(B($BA0IU$-%Q%$%W$r(B
$BMQ$$$k$3$H$K$h$C$F!"%+%l%s%H%7%'%k$GH$G$-$k!#(B
$B$7$+$7$3$N(B {} $BFbIt$G$b(B while $BJ8$K%j%@%$%l%/%H$d%Q%$%W$r;H$&$H!"(B
$B$3$N(B while $BJ8$,%5%V%7%'%k$G&1 1>&{tempfile}) $B$9$k$3$H$K$h$C$F!"(B while $BJ8$r%+%l%s%H%7%'%k$G(B
$BH$G$-!"$^$?(B 256--261 $B$N(B
$BItJ,$G@hDx$N%+%l%s%H%7%'%k$GCHq$7$F$7$^$&$,!"$l$b$H$N%U%!%$%k(B
$B%G%#%9%/%j%W%?$KLa$7$F$*$-!"$=$N8e$N%9%/%j%W%H$K1F6A$,$J$$$h$&$K$7$F$$$k!#(B
(132 $B9TL\$O%5%V%7%'%k$Ge$N(B UNIX v7 $B$N(B /bin/sh
$B$=$NB>(B Bourne Shell $B7O$N%7%'%k(B (bash, zsh, ash, pdksh)