3.29. ÀÚÁú±¸·¹ÇÑ °Íµé(Miscellany)

 

ºñ·Ï º» ½©ÀÇ ¼Ò½º Äڵ带 µé¿©´Ù º¸´Â°Ô ¾à°£ÀÇ µµ¿òÀÌ µÉ Áö´Â ¸ô¶óµµ ±× ¹®¹ýÀº ¾Æ¹«µµ ¾ËÁö ¸øÇÑ´Ù.

 
--Tom Duff 

3.29.1. »óÈ£ ´ëÈ­(Interactive) ½ºÅ©¸³Æ®¿Í ºñ »óÈ£ ´ëÈ­(non-interactive) ½ºÅ©¸³Æ®

º¸Åë read ¹®(예 3-42 Âü°í)¿¡ ÀÇÇØ¼­ »ç¿ëÀÚ°¡ ÀÔ·ÂÀ» ³Ö¾î¾ß ÇÏ´Â ½ºÅ©¸³Æ®¸¦ »óÈ£ ´ëÈ­(interactive) ½ºÅ©¸³Æ®¶ó°í Á¤ÀÇÇսôÙ. "½ÇÁ¦ ¼¼°è"¿¡¼­´Â À̰ͺ¸´Ù Á¶±Ý ´õ º¹ÀâÇØ¼­ »óÈ£ ´ëÈ­ ½©¿¡ ´ëÇÑ Çü½ÄÀûÀÎ ¸í¼¼(Ramey¿Í Fox¿¡ µû¸¥)´Â º¹ÀâÇϰí È¥¶õ½º·´½À´Ï´Ù. Áö±Ý ´çÀåÀº, »ç¿ëÀÚ°¡ ÄܼÖÀ̳ª ÇÑÅҵ¼­ ½ÇÇà½ÃŲ tty¿¡ ÇÑÁ¤µÈ ½ºÅ©¸³Æ®¸¦ »óÈ£ ´ëÈ­ ½ºÅ©¸³Æ®¶ó°í ¹Þ¾Æ µéÀԽôÙ.

ÃʱâÈ­¿Í ½Ã½ºÅÛ ±¸µ¿(startup) ½ºÅ©¸³Æ®´Â ¹Ýµå½Ã ºñ »óÈ£ ´ëÈ­(non-interactive) ½ºÅ©¸³Æ®¿©¾ß ÇÕ´Ï´Ù. ¿Ö³ÄÇϸé À̵éÀº »ç¶÷ÀÇ °³ÀÔ¾øÀÌ µ¹¾Æ¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù. ¸¹Àº ¼öÀÇ °ü¸®¿ëÀ̳ª ½Ã½ºÅÛ À¯Áö¿ë ½ºÅ©¸³Æ®µéÀº ¿ª½Ã ºñ »óÈ£ ´ëÈ­ ½ºÅ©¸³Æ®ÀÔ´Ï´Ù. Ç×»ó °°°í ¹Ýº¹ÀûÀÎ ÀÛ¾÷ÀÇ ÀÚµ¿È­¿¡´Â ºñ »óÈ£ ´ëÈ­ ½ºÅ©¸³Æ®°¡ ÇÊ¿äÇÕ´Ï´Ù.

ºñ »óÈ£ ´ëÈ­ ½ºÅ©¸³Æ®´Â ¹é±×¶ó¿îµå·Î µ¹ ¼ö ÀÖÁö¸¸ »óÈ£ ´ëÈ­ ½ºÅ©¸³Æ®´Â °áÄÚ ¹ÞÀ» ¼ö ¾ø´Â »ç¿ëÀÚ ÀÔ·ÂÀ» ±â´Ù¸®¸é¼­ ¸ØÃç ÀÖ°Ô µË´Ï´Ù. ÀÌ·± °ï¶õÇÑ »óȲ¿¡ ´ëÇØ¼­´Â expect ½ºÅ©¸³Æ®³ª ½ºÅ©¸³Æ®¿¡ Æ÷ÇÔµÈ here document (3.24절 Âü°í)¸¦ »ç¿ëÇØ¼­ ¹é±×¶ó¿îµå·Î µµ´Â »óÈ£ ´ëÈ­ ½ºÅ©¸³Æ®¿¡ ÀÔ·ÂÀ» ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. °¡Àå °£´ÜÇÑ °æ¿ì·Î´Â read ¹®¿¡ ÀÔ·Â ÀçÁöÇâÀ» ½á¼­ ÆÄÀÏ¿¡¼­ ÀÔ·ÂÀ» ¹Þµµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù(read variable <file). ÀÌ·± ƯÁ¤ÇÑ ¸î °¡Áö ÇØ°áÃ¥ ´öºÐ¿¡ Æò¹üÇÑ ¿ëµµÀÇ ½ºÅ©¸³Æ®µéÀ» »óÈ£ ´ëÈ­ ¸ðµå³ª ºñ »óÈ£ ´ëÈ­ ¸ðµå ¾ç ÂÊ¿¡¼­ µ¹ ¼ö ÀÖ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¸¸¾à¿¡ ½ºÅ©¸³Æ®°¡ ÇöÀç »óÈ£ ´ëÈ­ ¸ðµå¿¡¼­ µ¹°í ÀÖ´ÂÁö ¾Æ´ÑÁö´Â ´Ü¼øÈ÷ prompt º¯¼öÀÎ $PS1ÀÇ Á¸Àç ¿©ºÎ·Î ¾Ë¾Æ³¾ ¼ö ÀÖ½À´Ï´Ù(»ç¿ëÀÚ°¡ ÀÔ·ÂÀ» ÇÒ Â÷·Ê(being prompted)¶ó¸é ½ºÅ©¸³Æ®´Â ÇÁ·ÒÇÁÆ®(prompt)¸¦ Ç¥½ÃÇØ¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù).
if [ -z $PS1 ] # ÇÁ·ÒÇÁÆ®°¡ ¾ø´Ù?
then
  # ºñ »óÈ£ ´ëÈ­(non-interactive) ¸ðµå
  ...
else
  # »óÈ£ ´ëÈ­(interactive) ¸ðµå
  ...
fi
´Ù¸¥ ¹æ¹ýµµ Àִµ¥, $- Ç÷¡±×¿¡¼­ i°¡ ÀÖ´ÂÁö ¾ø´ÂÁö·Î È®ÀÎÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
case $- in
*i*)    # »óÈ£ ´ëÈ­(interactive script) ½ºÅ©¸³Æ®
;;
*)      # ºñ »óÈ£ ´ëÈ­(non-interactive) ½ºÅ©¸³Æ®
;;
# (1993³â "UNIX F.A.Q."¿¡¼­ ¹ßÃé)

참고: i ¿É¼ÇÀ¸·Î ½ÇÇà½ÃŰ°Å³ª ½ºÅ©¸³Æ® Çì´õ¿¡ #!/bin/bash -i¸¦ ³Ö¾î °­Á¦·Î »óÈ£ ´ëÈ­ ¸ðµå·Î µ¹°Ô ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± ¹æ¹ýÀ» ¾µ ¶§´Â Á¶½ÉÇØ¾ß Çϴµ¥ ½ºÅ©¸³Æ®°¡ ¾û¶×ÇÏ°Ô µ¿ÀÛÇϰųª ¿¡·¯°¡ ¾ø´Â °÷¿¡¼­ ¿¡·¯ ¸Þ¼¼Áö¸¦ »Ñ¸± ¼ö ÀÖ½À´Ï´Ù.

3.29.2. ÃÖÀûÈ­(Optimizations)

´ëºÎºÐÀÇ ½© ½ºÅ©¸³Æ®´Â º°·Î º¹ÀâÇÏÁö ¾ÊÀº ¹®Á¦¿¡ ´ëÇØ °£´ÜÇÑ ÇØ°áÃ¥À» °®°í ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¿¡´Â ¼Óµµ¸¦ À§ÇÑ ÃÖÀûÈ­´Â À̽´°¡ µÇÁö ¾Ê½À´Ï´Ù. ÇÏÁö¸¸ ¾ÆÁÖ Áß¿äÇÑ ÀÛ¾÷À» ¼öÇàÇÏ´Â ½ºÅ©¸³Æ®Àε¥ µ¿ÀÛÀº Àß ÇÏÁö¸¸ ¼Óµµ°¡ ³Ê¹« ´À¸° °æ¿ì¸¦ »ý°¢ÇØ º¾½Ã´Ù. ÄÄÆÄÀÏ ¾ð¾î·Î ´Ù½Ã ÀÛ¼ºÇÏ´Â °ÍÀº º°·Î ÁÁÀº »ý°¢ÀÌ ¾Æ´Ò °ÍÀÔ´Ï´Ù. °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ¼Óµµ¸¦ ¶³¾î¶ß¸®´Â ºÎºÐ¸¸À» ´Ù½Ã ÀÛ¼ºÇÏ´Â °ÍÀÔ´Ï´Ù. ÄÚµå ÃÖÀûÈ­ÀÇ À̷еéÀ» ÀÌ ÃʶóÇÑ ½© ½ºÅ©¸³Æ®¿¡µµ Àû¿ëÇÒ ¼ö°¡ ÀÖÀ»±î¿ä?

·çÇÁ¹®µéÀ» »ìÆì º¸¼¼¿ä. ¹Ýº¹ÀûÀÎ ¿¬»êµéÀº ½Ã°£À» ¸¹ÀÌ Àâ¾Æ ¸Ô½À´Ï´Ù. time³ª times¸¦ ½á¼­ °è»êÀ» ¸¹ÀÌ ÇÏ´Â ¸í·É¾îµéÀÇ ½Ã°£À» Àç º¸±â ¹Ù¶ø´Ï´Ù. ¾Æ´Ï¸é ½Ã°£¿¡ ¹Î°¨ÇÑ ºÎºÐÀ» C³ª ¾î¼Àºí·¯·Î ´Ù½Ã Â¥´Â °Íµµ °í·ÁÇØ º¸±â ¹Ù¶ø´Ï´Ù.

ÆÄÀÏ I/O¸¦ ÃÖ¼ÒÈ­ Çϼ¼¿ä. bash´Â ÆÄÀÏÀ» ´Ù·ç´Âµ¥ Ưº°È÷ È¿°úÀûÀÌÁö ¾Ê±â ¶§¹®¿¡ awk³ª PerlµîÀ¸·Î ÀÌ·± ºÎºÐÀ» ´ëü ÇÏ´Â °Íµµ ÁÁÀº ¹æ¹ýÀÔ´Ï´Ù.

±¸Á¶ÀûÀÌ°í ³í¸®ÀûÀÎ ½ºÅ©¸³Æ®°¡ µÇµµ·Ï ¸¸µå¼¼¿ä. ÀÌ·¸°Ô ÇØ¾ß ³ªÁß¿¡ ÇÊ¿äÇÒ ¶§ ´Ù½Ã ÀÛ¼ºÇϰųª ´õ °­È­µÈ ÇüÅ·Πº¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. °í±Þ ¾ð¾îµé¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Â ¸î¸î ÃÖÀûÈ­ ±â¹ýµéÀº ½ºÅ©¸³Æ®¿¡ Àû¿ë °¡´ÉÇÕ´Ï´Ù¸¸ ¿¹¸¦ µé¾î ·çÇÁ unrolling °°Àº °ÍµéÀº °ÅÀÇ ¹«ÀǹÌÇÕ´Ï´Ù. ¹«¾ùº¸´Ùµµ »ó½ÄÀûÀÎ ¼±¿¡¼­ »ç¿ëÇÏ¸é µÇ°Ú½À´Ï´Ù.

3.29.3. ÆÁ ¸ðÀ½(Assorted Tips)