here document´Â ftp, telnet, exó·³ »ç¿ëÀÚ¿Í ÀÔ·ÂÀ» ÁÖ°í ¹Þ´Â ÇÁ·Î±×·¥(interactive)¿¡°Ô ¸í·É¾î ½ºÅ©¸³Æ®¸¦ ÀνĽÃų ¼ö ÀÖ°Ô Çϱâ À§Çؼ I/O ÀçÁöÇâ(3.13절 Âü°í)ÀÇ Æ¯º°ÇÑ ÇüŸ¦ »ç¿ëÇÕ´Ï´Ù. ½ºÅ©¸³Æ®´Â º¸Åë, ƯÁ¤ ÇÁ·Î±×·¥¿¡ ³Ñ±æ ¸í·É¾îµéÀ» Á¦ÇÑ ¹®ÀÚ¿(limit string)·Î ±¸ºÐÇØ¼ Ç¥ÇöÇÕ´Ï´Ù. Ưº°ÇÑ ½Éº¼ÀÎ << µÚ¿¡ Á¦ÇÑ ¹®ÀÚ¿À» Àû¾î ÁÝ´Ï´Ù. ÀÌ·¸°Ô ÇØ¼ Ãâ·Â ÆÄÀÏÀ» ±× ÇÁ·Î±×·¥À¸·Î ÀçÁöÇâ ½ÃŰ°Ô µË´Ï´Ù. Áï, ´ÙÀ½°ú ºñ½ÁÇÑ ÇüŰ¡ µË´Ï´Ù.
interactive-program < command-file |
command #1 command #2 ... |
"here document"¸¦ ¾´´Ù¸é ÀÌ·¸°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.
#!/bin/bash interactive-program <<LimitString command #1 command #2 ... LimitString |
Á¦ÇÑ ¸í·É¾î´Â ¾î¶² ¸í·É¾î ¸ñ·Ï¿¡¼µµ ³ªÅ¸³ªÁö ¾ÊÀ» ¾ÆÁÖ ÀϹÝÀûÀÌÁö ¾Ê´Â ¹®ÀÚ¿·Î °ñ¶ó¾ß ÇÒ °ÍÀÔ´Ï´Ù. ±×·¸°Ô ¾È Çϸé ÀÏÀÌ ¾ÆÁÖ º¹ÀâÇØ Áý´Ï´Ù.
"here documents"´Â »ç¿ëÀÚ¿Í ´ëÈÇÏÁö ¾Ê´Â(non-interactive) À¯Æ¿¸®Æ¼³ª ¸í·É¾î¿Í ¾µ ¶§ ´õ ÁÁÀº È¿°ú°¡ ÀÖ´Ù´Â °Í¿¡ ÁÖÀÇÇϼ¼¿ä.
예 3-92. dummyfile: µÎ ÁÙÂ¥¸® ´õ¹Ì ÆÄÀÏ ¸¸µé±â
#!/bin/bash # ÆÄÀÏÀ» ÆíÁýÇϱâ À§ÇØ 'vi'¸¦ ºñ»óÈ£´ëÈ ¸ðµå·Î »ç¿ë # 'sed'¸¦ Èä³»³¿. if [ -z $1 ] then echo "»ç¿ë¹ý: `basename $0` filename" exit 1 fi TARGETFILE=$1 vi $TARGETFILE <<x23LimitStringx23 i ¿¹Á¦ ÆÄÀÏ¿¡¼ ù¹øÂ° ÁÙÀÔ´Ï´Ù. ¿¹Á¦ ÆÄÀÏ¿¡¼ µÎ¹øÂ° ÁÙÀÔ´Ï´Ù. ^[ ZZ x23LimitStringx23 # À§¿¡¼ ^[ ´Â Control-V¿Í Escape ۸¦ ¼ø¼´ë·Î ´·ÈÀ» ¶§ ³ªÅ¸³ª´Â Ç¥½ÃÀÔ´Ï´Ù. exit 0 |
À§ ½ºÅ©¸³Æ®´Â viº¸´Ù ex¸¦ ½á¼ ±¸ÇöÇß´Ù¸é ´õ È¿°úÀûÀÔ´Ï´Ù. ex ¸í·É¾î ¸ñ·ÏÀ» ½ÇÇàÇÏ´Â here document´Â ex ½ºÅ©¸³Æ®(ex scripts)¶ó°í ¾Ë·ÁÁ® ÀÖ´Â ÇüÅ·Π¸¸µé¾îµµ ÃæºÐÇÕ´Ï´Ù.
예 3-93. broadcast: ·Î±×ÀÎ ÇØ ÀÖ´Â ¸ðµç »ç¿ëÀÚ¿¡°Ô ¸Þ¼¼Áö¸¦ º¸³»±â
#!/bin/bash wall <<zzz23EndOfMessagezzz23 Áß¾Ó º»ºÎ¿¡¿¡¼ º¸¿À³»¾Ö´ÀÀº ¸Þ¼¼ÁöÀÌÀÔ´ÏÀÌ´Ù. ¹«½º¸¦ ÁÖ±âÁö ¸¶¼¼¿ä! # ´Ù¸¥ ¸Þ¼¼Áöµµ º¸³¾ ¼ö ÀÖ½À´Ï´Ù. # ÁÖÀÇ: 'wall'Àº ÁÖ¼®µµ ¸Þ¼¼Áö·Î ³»º¸³À´Ï´Ù. zzz23EndOfMessagezzz23 # wall <message-file ó·³ ÇØ¼ ´õ È¿°úÀûÀ¸·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù. exit 0 |
예 3-94. catÀ¸·Î ¿©·¯ ÁÙÀÇ ¸Þ¼¼Áö Ãâ·Â
#!/bin/bash # 'echo' ´Â ÇÑ ÁÙÂ¥¸® ¸Þ¼¼Áö¸¦ Âï±â¿¡ ¾ÆÁÖ ÁÁ½À´Ï´Ù¸¸, # ¿©·¯ÁÙÀÇ ¸Þ¼¼Áö¸¦ ÂïÀ¸·Á¸é ¹®Á¦°¡ ¸¹½À´Ï´Ù. # 'cat'À» ÀÌ¿ëÇÑ "here document"°¡ ÀÌ ¹®Á¦¸¦ ÇØ°áÇØ ÁÝ´Ï´Ù. cat <<End-of-message ------------------------------------- ¸Þ¼¼ÁöÀÇ Ã¹ ¹øÂ°ÁÙÀÔ´Ï´Ù. ¸Þ¼¼ÁöÀÇ µÎ ¹øÂ°ÁÙÀÔ´Ï´Ù. ¸Þ¼¼ÁöÀÇ ¼¼ ¹øÂ°ÁÙÀÔ´Ï´Ù. ¸Þ¼¼ÁöÀÇ ³× ¹øÂ°ÁÙÀÔ´Ï´Ù. ¸Þ¼¼ÁöÀÇ ¸¶Áö¸· ÁÙÀÔ´Ï´Ù. ------------------------------------- End-of-message exit 0 |
예 3-95. upload: "Sunsite" incoming µð·ºÅ丮¿¡ ÆÄÀÏ ÇÑ ½ÖÀ» ¾÷·Îµå
#!/bin/bash # ¾÷·Îµå # ÆÄÀÏ µÎ °³(filename.lsm, filename.tar.gz)¸¦ # Sunsite incoming µð·ºÅ丮¿¡ ¾÷·Îµå if [ -z $1 ] then echo "»ç¿ë¹ý: `basename $0` filename" exit 1 fi Filename=`basename $1` # ÆÄÀÏ À̸§¿¡¼ °æ·Î À̸§À» ¶¼¾î³»°í Server="metalab.unc.edu" Directory="/incoming/Linux" # ÀÌ·¸°Ô Çϵå ÄÚµùÇØ¼ ÇÒ ÇÊ¿ä´Â ¾ø°í # ¸í·É¾î ÁÙ ÀÎÀÚ·Î ¹Ù²ã¼ ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Password="your.e-mail.address" # ¾Ë¸Â°Ô °íÄ¡¼¼¿ä ftp -n $Server <<End-Of-Session # -n ¿É¼ÇÀº ÀÚµ¿ ·Î±×ÀÎÀ» ¸·¾ÆÁÝ´Ï´Ù. user anonymous $Password binary bell # °¢ ÆÄÀÏ Àü¼ÛÀÌ ³¡³¯¶§¸¶´Ù 'bell'À» ¿ï·ÁÁÝ´Ï´Ù. cd $Directory put $Filename.lsm put $Filename.tar.gz bye End-Of-Session exit 0 |
참고: ¸î¸î À¯Æ¿¸®Æ¼µéÀº "here document"¿¡¼ Àß µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ÆäÀÌÁ®ÀÎ more³ª less°¡ À̵éÁß ÇϳªÀÔ´Ï´Ù.
"here document"·Î Çϱ⿡ ³Ê¹« º¹ÀâÇÒ °Í °°Àº ÀÏ¿¡´Â expect ½ºÅ©¸³Æ® ¾ð¾î¸¦ °í·ÁÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù. expect´Â »ç¿ëÀÚ¿Í »óÈ£ ´ëÈÇÏ´Â ÇÁ·Î±×·¥¿¡°Ô µü ¸Â´Â ÀÔ·ÂÀ» Á¦°øÇÒ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù.