31장. 옵션

옵션은 쉘이나 스크립트의 행동을 변경하도록 설정해 줍니다.

set 명령어는 스크립트 안에서 옵션을 켤 수 있게 해 줍니다. 옵션이 적용될 곳에서 set -o -option-name 이라고 하거나 간단하게 set -option-abbrev 라고 하면 됩니다. 이 두 가지 형태는 동일하게 동작합니다.

      #!/bin/bash

      set -o verbose
      # 모든 명령어는 실행전에 echo 됨.
      

      #!/bin/bash

      set -v
      # 위와 완전히 똑같음.
      

참고: 스크립트에서 옵션을 끄고 싶다면 set +o option-name 이나 set +option-abbrev 라고 하세요.

      #!/bin/bash

      set -o verbose
      # 명령어가 echo 를 킵니다.
      command
      ...
      command

      set +o verbose
      # 명령어가 echo 를 끕니다.
      command
      # echo 되지 않습니다.


      set -v
      # 명령어 echo 를 킵니다.
      command
      ...
      command

      set +v
      # 명령어 echo 를 끕니다.
      command

      exit 0
      

스크립트 헤더인 #! 뒤에 옵션을 적어줘서 옵션을 켤 수도 있습니다.

      #!/bin/bash -x
      #
      # 스크립트 내용이 나옵니다.
      

명령어 줄에서 옵션을 켜는 방법도 있습니다. set으로 안 먹는 몇몇 옵션은 이 방법을 쓰면 됩니다. 이런 옵션중 하나인 -i는 스크립트를 대화형 모드(interactive)로 돌게 합니다.

bash -v script-name

bash -o verbose script-name

다음은 몇 개의 유용한 옵션들 목록입니다. 단축형이나 완전한 형태중 하나로 지정해 줄 수 있습니다.

표 31-1. bash 옵션들

단축형이름
-Cnoclobber파일이 재지향에 의해 덮어 써지지 않게 막아줌(>| 를 쓰면 가능할 수 있음)
-D(none)$ 다음에 나오는 큰 따옴표로 쿼우트된 문자열 목록을 보여주기만 하고 명령어를 실행시키지 않음
-aallexport정의된 모든 변수를 export 시킴
-bnotify백그라운드로 돌던 작업의 종료를 알려줌(스크립트에서는 그렇게 자주 쓰이지 않음)
-c ...(none)...에서 명령어를 읽어 들임
-fnoglob파일명 확장(globbing)을 끔
-iinteractive스크립트를 대화형(interactive) 모드로 돌게함
-pprivileged스크립트를 "suid"로 돌게함(조심할 것!)
-rrestricted스크립트를 제한된 모드로 돌게함(21장 참고)
-unounset정의 안 된 변수 사용시 에러 메세지 출력후 강제 종료
-vverbose명령어 실행 전에 명령어를 표준출력으로 출력
-xxtrace-v와 비슷하나 명령어를 확장
-eerrexit첫번째 에러에서 스크립트를 취소(0 이 아닌 상태로 종료하는 명령어)
-nnoexec스크립트의 명령어를 읽기만 하고 실행은 안 함(문법 체크)
-sstdin표준입력에서 명령어를 읽어 들임
-t(none)첫번째 명령어 바로 다음에 종료
-(none)옵션 플래그의 끝. 나머지 인자들은 모두 위치 매개변수로 인식.
--(none)위치 인자로 안 받아 들임. 인자가 주어지면 (-- arg1 arg2), 위치 매개변수는 인자로 세트됨.