리눅스 shell script exit에 관해서

add3316의 이미지

쉘 스크립트에서 exit를 왜 선언해야 하는거고, exit를 사용하지 않아도 왜 지정된 값이 출력되는 거죠?? exit의 정확한 사용 이유와 exit를 쓰지 않아도 왜 값이 출력되는지 자세히 알고 싶습니다.

ymir의 이미지

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 』

add3316의 이미지

감사합니다 도움이 되었어요

김정균의 이미지

exit code 는 https://tldp.org/LDP/abs/html/exitcodes.html 를 참조 하시면되고, 지정하지 않았을 경우에는 스크립트의 가장 마지막 수행 결과의 exit code 가 자동으로 반환이 됩니다.

예를 들어

#!/bin/bash
 
echo "1" >& /dev/null

의 경우에는 echo "1" 가 정상 수행 되므로, 자동으로 exit code 는 0을 반환합니다.

다음의 경우에는

#!/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
add3316의 이미지

정말 감사드려요

익명 사용자의 이미지

보통 프로그램에서 정상 종료시 "return 0" 으로 프로그램을 끝냅니다.(생략시 0으로 종료)

그래서 shell에서 명령어가 정상 종료 후 echo $?를 찍어보면 0이 찍히는 이유죠

그런데 아래와 같이 정상 종료임에도 불구 하고, 임의로 "return 1"로 종료되는 프로그램 짜면

#include <stdio.h>
int main()
{
	return 1;
}

echo $? 값은 1이 되어버립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.