3Àå. Á¾·á¿Í Á¾·á »óÅÂ(Exit and Exit Status)

 

»ç¶÷µéÀº º»½©ÀÇ ¾îµÎ¿î ¸éÀ» ¸ðµÎ »ç¿ëÇÑ´Ù.

 Chet Ramey

exit ¸í·É¾î´Â C ÇÁ·Î±×·¥¿¡¼­Ã³·³ ½ºÅ©¸³Æ®¸¦ ³¡³¾ ¶§ ¾¹´Ï´Ù. ¶ÇÇÑ, ½ºÅ©¸³Æ®ÀÇ ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô ¾î¶² °ªÀ» µ¹·Á ÁÙ ¼öµµ ÀÖ½À´Ï´Ù.

¸ðµç ¸í·É¾î´Â Á¾·á »óÅÂ( exit status (°¡²ûÀº ¸®ÅÏ »óÅÂ( return status )¶ó°íµµ ÇÏ´Â)¸¦ ¸®ÅÏÇÕ´Ï´Ù. ¸í·É¾î°¡ ¼º°ø½Ã¿¡´Â 0À» ¸®ÅÏÇÏ°í ½ÇÆнÿ¡´Â ¿¡·¯ ÄÚµå·Î Çؼ®µÉ ¼ö ÀÖ´Â non-zero¸¦ ¸®ÅÏÇÕ´Ï´Ù. ¿¹¿Ü°¡ ÀÖ±â´Â ÇÏÁö¸¸, À¯´Ð½º °ü·Ê¸¦ Àß µû¸£´Â ¸í·É¾î, ÇÁ·Î±×·¥, À¯Æ¿¸®Æ¼´Â ¼º°øÇßÀ» ¶§ 0À» ¸®ÅÏÇÕ´Ï´Ù.

ºñ½ÁÇÏ°Ô, ½ºÅ©¸³Æ®ÀÇ ÇÔ¼ö³ª ½ºÅ©¸³Æ® Àڽŵµ Á¾·á »óŸ¦ ¸®ÅÏÇÕ´Ï´Ù. ½ºÅ©¸³Æ® ÇÔ¼ö³ª ½ºÅ©¸³Æ®¿¡¼­ °¡Àå ¸¶Áö¸·¿¡ ½ÇÇàµÈ ¸í·É¾î°¡ Á¾·á »óŸ¦ °áÁ¤ÇÕ´Ï´Ù. ½ºÅ©¸³Æ®¿¡¼­ exit nnn À̶ó°í Çϸé nnnÀ̶ó´Â Á¾·á »óŸ¦ ½©¿¡°Ô Àü´ÞÇØ ÁÝ´Ï´Ù(nnnÀº 0¿¡¼­ 255 »çÀÌÀÇ ½ÊÁø¼ö¿©¾ß ÇÕ´Ï´Ù).

Âü°í: ¸Å°³º¯¼ö ¾øÀÌ ±×³É exit·Î ³¡³µÀ» °æ¿ì¿¡´Â, ¸¶Áö¸·¿¡ ½ÇÇàµÈ ¸í·É¾î(exit ÀÚ½ÅÀº »©°í)ÀÇ Á¾·á »óÅ°¡ ½ºÅ©¸³Æ®ÀÇ Á¾·á »óÅ°¡ µË´Ï´Ù.

$? ´Â Á¦ÀÏ ¸¶Áö¸· ¸í·É¾îÀÇ Á¾·á »óŸ¦ º¸¿©ÁÝ´Ï´Ù. ÇÔ¼ö°¡ ¸®ÅÏÇÑ ´ÙÀ½¿¡ $?¶ó°í Çϸé ÇÔ¼öÀÇ ¸¶Áö¸· ¸í·É¾îÀÇ Á¾·á »óŸ¦ ¾Ë·ÁÁÝ´Ï´Ù. bash¿¡¼­´Â ÀÌ·¸°Ô Çؼ­ ÇÔ¼öÀÇ "¹Ýȯ°ª"À» µ¹·Á ÁÝ´Ï´Ù. ½ºÅ©¸³Æ®°¡ Á¾·áÇÑ ´ÙÀ½¿¡´Â ¸í·É¾îÁÙ¿¡¼­ $?·Î ½ºÅ©¸³Æ® ¸¶Áö¸· ¸í·É¾îÀÇ Á¾·á »óŸ¦ ¾Ë ¼ö°¡ Àִµ¥ °ü½ÀÀûÀ¸·Î 0Àº ¼º°øÀ» ³ªÅ¸³»°í 1¿¡¼­ 255±îÁöÀÇ ¼ýÀÚ´Â ¿¡·¯¸¦ ³ªÅ¸³À´Ï´Ù.

¿¹ 3-1. Á¾·á/Á¾·á »óÅÂ

#!/bin/bash

echo hello
echo $?    # ¸í·É¾î°¡ ¼º°øÇ߱⠶§¹®¿¡ Á¾·á »óÅ 0ÀÌ ¸®ÅϵÊ.

lskdf      # ¾Ë¼ö¾ø´Â ¸í·É¾î.
echo $?    # 0ÀÌ ¾Æ´Ñ Á¾·á »óÅ°¡ ¸®ÅϵÊ.

echo

exit 113   # ½©¿¡°Ô 113À» ¸®ÅÏÇÔ.
# È®ÀÎÇØ º¸·Á¸é ÀÌ ½ºÅ©¸³Æ®°¡ Á¾·áµÈ ´ÙÀ½¿¡ "echo $?"¶ó°í ÃÄ º¸¼¼¿ä.

# °ü½ÀÀûÀ¸·Î 'exit 0'Àº ¼º°øÀ» ÀǹÌÇÕ´Ï´Ù.
# 0ÀÌ ¾Æ´Ñ °ªÀº ¿¡·¯³ª ¿¹¿Ü»óȲÀ» ³ªÅ¸³À´Ï´Ù.

$? ´Â ½ºÅ©¸³Æ®¿¡¼­ ½ÇÇà½ÃÅ° ¸í·É¾îÀÇ °á°ú¸¦ È®ÀÎÇϴµ¥ Ưº°È÷ À¯¿ëÇÏ°Ô ¾²ÀÔ´Ï´Ù(¿¹ 12-8 ¿Í ¿¹ 12-13 Âü°í).

Âü°í: ³í¸®Àû "ºÎÁ¤" ÇÑÁ¤¾î(qualifier)ÀÎ ! ´Â Å×½ºÆ®³ª ¸í·É¾îÀÇ °á°ú¸¦ ¹Ý´ë·Î ¹Ù²ã¼­ Á¾·á »óÅ¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù.

¿¹ 3-2. !À¸·Î Á¶°ÇÀ» ºÎÁ¤Çϱâ

true  # ½© ³»Àå¸í·É¾îÀÎ "true".
echo "\"true\"ÀÇ Á¾·á »óÅ = $?"     # 0

! true
echo "\"! true\"ÀÇ Á¾·á »óÅ = $?"   # 1
# Á¶½ÉÇÒ Á¡Àº "!"À» ¾µ ¶§, ºó Ä­ÀÌ ÀÖ¾î¾ß µÈ´Ù´Â °ÍÀÔ´Ï´Ù.
# ±×³É !true ¶ó°í ¾²¸é "command not found" ¿¡·¯°¡ ³³´Ï´Ù.

# Thanks, S.C.

°æ°í

¸î¸î Á¾·á »óÅ ÄÚµåµéÀº ¿¹¾àµÅ Àֱ⠶§¹®¿¡ »ç¿ëÀÚ°¡ ½ºÅ©¸³Æ®¿¡¼­ ¸¶À½´ë·Î ¾²¸é ¾È µË´Ï´Ù.