쉘 스크립트에서 exit를 왜 선언해야 하는거고, exit를 사용하지 않아도 왜 지정된 값이 출력되는 거죠?? exit의 정확한 사용 이유와 exit를 쓰지 않아도 왜 값이 출력되는지 자세히 알고 싶습니다.
shell script 의 종료값은 종료 직전 마지막으로 수행한 명령의 결과(성공/실패) 에 따라 다르고, 종료시 내부적으로 exit 를 호출해 주기 때문에, 굳이 exit 를 쓰지 않아도 상관 없습니다.
보통은 script 실행 도중에 더 이상 진행을 하면 안 되는 상태에서 script 를 종료하기 위해서 씁니다. 추가로 shell script 의 종료값을 명시적으로 지정해서, 이를 호출하는 다른 script 나 프로그램에서 그 값을 이용할 수도 있습니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
감사합니다 도움이 되었어요
exit code 는 https://tldp.org/LDP/abs/html/exitcodes.html 를 참조 하시면되고, 지정하지 않았을 경우에는 스크립트의 가장 마지막 수행 결과의 exit code 가 자동으로 반환이 됩니다.
예를 들어
#!/bin/bash echo "1" >& /dev/null
의 경우에는 echo "1" 가 정상 수행 되므로, 자동으로 exit code 는 0을 반환합니다.
echo "1"
다음의 경우에는
#!/bin/bash ls 112233445566 >& /dev/null
마지막 ls 명령이 112233445566 이 없다면 ls 명령의 반환값은 1이므로, 이 스크립트 역시 1을 반환하게 됩니다.
기본적으로 >& 뒤에는 fd number 가 오게되어 있습니다. ( bash 가 아닌 sh 에서는 위 문장은 오류 ) 따라서 뒤에 파일이름이 올경우는 & 문자를 제거하여 > /dev/null 와 같이 사용하는것이 좋습니다.
">&" 는 stdin, stdout 을 모두 뒤의 파일로 보내라는 의미이니 sh 호환으로 하려면
echo 1 > /dev/null 2>&1
이 맞겠죠. 근데.. bash 가 없는 경우가 드문 현재 상황에서 굳이 sh 를 고려해야 할까는 좀 의문 스럽습니다. busybox 도 bash를 지원하는 상황에, sh를 고려해야할 만한 상황이 아직도 남아있는지는 좀 그래요. 그냥 bash의 기능을 잘 누리는 것이 좋지 않을까 싶네요.
bash 에서는 ">&" 도 되고, "&>" 도 됩니다.
echo 1 >& /dev/null echo 1 &> /dev/null
정말 감사드려요
보통 프로그램에서 정상 종료시 "return 0" 으로 프로그램을 끝냅니다.(생략시 0으로 종료)
그래서 shell에서 명령어가 정상 종료 후 echo $?를 찍어보면 0이 찍히는 이유죠
그런데 아래와 같이 정상 종료임에도 불구 하고, 임의로 "return 1"로 종료되는 프로그램 짜면
#include <stdio.h> int main() { return 1; }
echo $? 값은 1이 되어버립니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
음 ..
shell script 의 종료값은 종료 직전 마지막으로 수행한 명령의 결과(성공/실패) 에 따라 다르고, 종료시 내부적으로 exit 를 호출해 주기 때문에, 굳이 exit 를 쓰지 않아도 상관 없습니다.
보통은 script 실행 도중에 더 이상 진행을 하면 안 되는 상태에서 script 를 종료하기 위해서 씁니다.
추가로 shell script 의 종료값을 명시적으로 지정해서, 이를 호출하는 다른 script 나 프로그램에서 그 값을 이용할 수도 있습니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
감사합니다 ㅎㅎ
감사합니다 도움이 되었어요
exit code 는 https://tldp.org
exit code 는 https://tldp.org/LDP/abs/html/exitcodes.html 를 참조 하시면되고, 지정하지 않았을 경우에는 스크립트의 가장 마지막 수행 결과의 exit code 가 자동으로 반환이 됩니다.
예를 들어
의 경우에는
echo "1"
가 정상 수행 되므로, 자동으로 exit code 는 0을 반환합니다.다음의 경우에는
마지막 ls 명령이 112233445566 이 없다면 ls 명령의 반환값은 1이므로, 이 스크립트 역시 1을 반환하게 됩니다.
기본적으로 >& 뒤에는 fd number 가 오게되어
기본적으로 >& 뒤에는 fd number 가 오게되어 있습니다. ( bash 가 아닌 sh 에서는 위 문장은 오류 )
따라서 뒤에 파일이름이 올경우는 & 문자를 제거하여 > /dev/null 와 같이 사용하는것이 좋습니다.
">&" 는 stdin, stdout 을 모두 뒤의
">&" 는 stdin, stdout 을 모두 뒤의 파일로 보내라는 의미이니 sh 호환으로 하려면
이 맞겠죠. 근데.. bash 가 없는 경우가 드문 현재 상황에서 굳이 sh 를 고려해야 할까는 좀 의문 스럽습니다. busybox 도 bash를 지원하는 상황에, sh를 고려해야할 만한 상황이 아직도 남아있는지는 좀 그래요. 그냥 bash의 기능을 잘 누리는 것이 좋지 않을까 싶네요.
bash 에서는 ">&" 도 되고, "&>" 도 됩니다.
자세한 설명 감사드립니다
정말 감사드려요
보통 프로그램에서 정상 종료시 "return 0"
보통 프로그램에서 정상 종료시 "return 0" 으로 프로그램을 끝냅니다.(생략시 0으로 종료)
그래서 shell에서 명령어가 정상 종료 후 echo $?를 찍어보면 0이 찍히는 이유죠
그런데 아래와 같이 정상 종료임에도 불구 하고, 임의로 "return 1"로 종료되는 프로그램 짜면
echo $? 값은 1이 되어버립니다.
댓글 달기