Ãâó :
http://revoman.tistory.com/entry/stderr-redirection
Ç¥ÁØ ¿¡·¯ Ãâ·Â(stderr) ÀçÁöÁ¤(>&, 2>)
Ç¥ÁØ¿¡·¯(stderr) ÀçÁöÁ¤
À¯´Ð½º ½©¿¡¼´Â Ç¥ÁØ ÀÔ·Â(stdin), Ç¥ÁØ Ãâ·Â(stdout), Ç¥ÁØ ¿¡·¯ Ãâ·Â(stderr)·Î ÀÌ¹Ì Á¤ÇØÁø ÆÄÀÏÀ̳ª ÀåÄ¡·Î ÁöÁ¤µÇ¾î ÀÖ´Ù. À¯´Ð½º ½©¿¡¼ Ç¥ÁØÀ¸·Î ÁöÁ¤µÈ ¿¡·¯Ãâ·Â(/dev/null)¸¦ ´Ù¸¥ ÆÄÀÏÀ̳ª ÀåÄ¡·Î ´Ù½Ã ÁöÁ¤ÇÏ´Â °ÍÀ» ÀçÁöÁ¤(redirection)À̶ó Çϸç, ÀÌ·¸°Ô ¹æÇâÀ» ÀçÁöÁ¤ÇÔÀ¸·Î½á, ¾î¶² ¸í·ÉÀÌ ½ÇÇàµÇ´Â °úÁ¤¿¡¼ ¹ß»ýÇÏ´Â ¿À·ù ¸Þ½ÃÁö¸¦ ¸ð´ÏÅÍ°¡ ¾Æ´Ñ ÁöÁ¤ÇÑ ÆÄÀÏ µûÀ§¿¡ ÀúÀåÇϹÇÀ¸·Î½á ¿¡·¯¸¦ Á¤È®ÇÏ°Ô ºÐ¼®ÇÒ ¶§ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.
---------- Ãâ·Â ------------------------------
> write (command > filename)
>> append (command >> filename)
< read (command < filename)
2> stderr (command 2> filename) - sh, ksh, bash
>& stderr (command >& filename) - csh
±âº»ÀûÀ¸·Î stdin, stdout, stderr¸¦ À§ÇØ ¿ÀÇ µÇ´Â ÆÄÀÏÀº /dev/tty, Áï ÀÚ½ÅÀÇ Å͹̳ÎÀÇ À̸§ÀÌ´Ù.
±âº»ÀÌ Å͹̳ÎÀ̹ǷΠ»ç¿ëÀÚµéÀº ÇÁ·Î±×·¥¿¡°Ô ¾îµð¿¡¼ ÀÐ°í ¾îµð¿¡ ¾²¶ó°í ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
¸ðµç ½©µéÀº stdin, stdout, stderr¿¡ ´ëÇÑ ±âº»ÀûÀÎ ¸®´ÙÀÌ·º¼ÇÀ» Á¦°øÇÑ´Ù. ´Ù¸¸ Bourne ½©Àº Ãß°¡·Î ÆÄÀÏ ±â¼ú¾î ¹øÈ£¸¦ 3¿¡¼ 9±îÁö ´Ù·ê ¼ö ÀÖ´Ù.
csh¿¡¼´Â Ç¥ÁØ ¿¡·¯ ÀüȯÀº sh(bash)¿Í´Â ´Ù¸£´Ù. º»½©(sh)À̳ª Äܽ©(ksh)¿¡¼´Â Ç¥ÁØ ¿¡·¯ ÀüȯÀ¸·Î 2> ¸¦ »ç¿ëÇϳª, C½©(csh)¿¡¼´Â >& ¸¦ »ç¿ëÇÑ´Ù.
noclobber ¼±ÅÃÀÚ°¡ ¼³Á¤µÈ °æ¿ì´Â >! ¿Í >&! ±âÈ£¸¦ »ç¿ëÇϸé csh°¡ ±âÁ¸ÀÇ ÆÄÀÏ À§¿¡ µ¡ºÙ¿© ±â·ÏÇÑ´Ù. ¶ÇÇÑ ±âÁ¸ ÆÄÀÏ µÚ¿¡ Ãâ·ÂÀ» Ãß°¡ÇÏ´Â °æ¿ì´Â >>! ³ª >>&! ±âÈ£¸¦ »ç¿ëÇÑ´Ù.
½©Àº Ç×»ó ±âº»ÀûÀ¸·Î Ç¥ÁØÀÔ·Â(stdin, Å°º¸µå), Ç¥ÁØÃâ·Â(stdout, ¸ð´ÏÅÍ), Ç¥ÁØ¿¡·¯(stderr, ¸ð´ÏÅÍ¿¡ ³ªÅ¸³¾ ¿¡·¯ ¸Þ¼¼Áö) "ÆÄÀϵé"À» ¿¾î ³õ´Â´Ù. ÀÌ ÆÄÀϵéÀ» Æ÷ÇÔÇؼ ¿·Á ÀÖ´Â ¾î¶² ÆÄÀÏÀÌ¶óµµ ÀçÁöÁ¤ µÉ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î ÀçÁöÁ¤ÇÏ¿© ÆÄÀÏ, ¸í·É¾î, ÇÁ·Î±×·¥, ½ºÅ©¸³Æ®, ½ÉÁö¾î´Â ½ºÅ©¸³Æ® ¼ÓÀÇ ÄÚµå ºí·°ÀÇ Ãâ·ÂÀ» ¹Þ¾Æ ´Ù¸¥ ÆÄÀÏ, ¸í·É¾î, ÇÁ·Î±×·¥, ½ºÅ©¸³Æ®ÀÇ ÀÔ·ÂÀ¸·Î º¸³»´Â °ÍÀÌ °¡´ÉÇÏ´Ù.
¿·Á ÀÖ´Â ÆÄÀÏ °¢°¢Àº ÆÄÀÏ µð½ºÅ©¸³ÅÍ(file descriptor)¸¦ ÇÒ´ç ¹Þ´Â´Ù.
[1] Ç¥ÁØÀÔ·Â, Ç¥ÁØÃâ·Â, Ç¥ÁØ¿¡·¯¿¡ ÇØ´çÇÏ´Â ÆÄÀÏ µð½ºÅ©¸³ÅÍ´Â °¢°¢ 0, 1, 2 ÀÌ´Ù. Ãß°¡ÀûÀ¸·Î ¿¸®´Â ÆÄÀÏÀ» À§Çؼ 3ºÎÅÍ 9±îÁöÀÇ ÆÄÀÏ µð½ºÅ©¸³ÅÍ°¡ ³²°ÜÁ® ÀÖ´Ù.
Á¾Á¾, ÀÌ Ãß°¡ÀûÀÎ ÆÄÀÏ µð½ºÅ©¸³Å͵éÁßÀÇ Çϳª¸¦ Ç¥ÁØÀÔ·Â, Ç¥ÁØÃâ·Â, Ç¥ÁØ¿¡·¯·Î ÇÒ´çÇؼ ÀÓ½ÃÀûÀÎ Áߺ¹µÈ ¸µÅ©·Î ¾²´Â °ÍÀÌ À¯¿ëÇÒ ¶§°¡ ÀÖ´Ù.
[2] ÀÌ·± ¹æ¹ýÀ» ¾²¸é ¾ÆÁÖ º¹ÀâÇÑ ÀçÁöÁ¤À̳ª ÆÄÀÏ µð½ºÅ©¸³Å͸¦ µÚÁ× ¹ÚÁ× »ç¿ëÇßÀ» ¶§, ¾ÆÁÖ °£´ÜÇÏ°Ô ¿ø·¡´ë·Î º¹±¸½ÃÄÑ ÁØ´Ù
¡¼¿¹Á¦¡½
$ echo 1234567890 > aa ¢Ð "aa"¿¡ ¹®ÀÚ¿À» ¾¸
$ exec 3<> aa ¢Ð "aa"À» ¿°í 3¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÇÒ´ç
$ read -n 4 <&3 ¢Ð "aa"À» ¿°í 3¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÇÒ´ç
$ echo -n . >&3 ¢Ð ¼Ò¼öÁ¡À» ¾²°í
$ exec 3>&- ¢Ð 3¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´ÝÀ½
$ cat aa
1234.67890
$
ÆÄÀÏ µð½ºÅ©¸³ÅÍ ´Ý±â
¿¬»êÀÚ |
ÀÇ¹Ì |
n<&- |
n¹ø ÀÔ·Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´ÝÀ½ |
0<&-, <&- |
Ç¥ÁØÀÔ·ÂÀ» ´ÝÀ½ |
n>&- |
n¹ø Ãâ·Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´ÝÀ½ |
1>&-, >&- |
Ç¥ÁØÃâ·ÂÀ» ´ÝÀ½ |
|
¡¼¿¹Á¦¡½
ÀÚ½Ä ÇÁ·Î¼¼½º´Â ¿·Á ÀÖ´Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ »ó¼Ó ¹Þ´Âµ¥ ÀÌ°Í ¶§¹®¿¡ ÆÄÀÌÇÁ°¡ µ¿ÀÛÇÑ´Ù. ÆÄÀÏ µð½ºÅ©¸³ÅÍ°¡ »ó¼ÓµÇ±æ ¹Ù¶óÁö ¾Ê´Â´Ù¸é ±× ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´ÝÀ¸¸é µÈ´Ù.
$ exec 3>&1 ¢Ð Ç¥ÁØÃâ·ÂÀÇ ÇöÀç "°ª"À» ÀúÀå.
$ ls -l 2>&1 >&3 3>&- | grep bad 3>&- ¢Ð 'ls'¿Í 'grep'À» À§ÇØ 3¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´Ý°í,
$ exec 3>&- ¢Ð ÀÌÁ¦, ½ºÅ©¸³Æ® ³ª¸ÓÁö ºÎºÐÀ» À§ÇØ ´Ý½À´Ï´Ù.
¡¼¿¹Á¦¡½
% bash ¢Ð bash·Î ½© Àüȯ
$ ping -c 1 203.234.57.256 2> bb >&2 ¢Ð 203.234.57.256À̶ó´Â È£½ºÆ®´Â ¾øÀ½
$ cat bb ¢Ð ±×·¯¹Ç·Î Ç¥ÁØ ¿¡·¯ Ãâ·ÂÀÌ bbÆÄÀÏ¿¡ ÀúÀåµÊ
ping: unknown host 203.234.57.256
$ ping -c 1 203.234.57.33 2> kk >&2 ¢Ð Á¤»óÀûÀÎ ping °á°ú°¡ kk ÆÄÀÏ¿¡ ÀúÀåµÊ
$ cat kk
203.234.57.33 is alive
$
$ csh ¢Ð csh·Î ½© Àüȯ
% ping -c 1 203.234.57.256 >& aa ¢Ð 203.234.57.256À̶ó´Â È£½ºÆ®°¡ ¾øÀ½
% cat aa ¢Ð ±×·¯¹Ç·Î Ç¥ÁØ ¿¡·¯ Ãâ·ÂÀÌ aa ÆÄÀÏ¿¡ ÀúÀåµÊ
ping: unknown host 203.234.57.256
%