주로 사용하는 설정이있는 bash 스크립트가 있습니다.
#!/bin/bash
하지만 저는 정기적으로
#!/bin/bash -e
#!/bin/bash -x
#!/bin/bash -ex
등등.
누군가이 세방 옵션의 의미와 이점과 다른 세방에 적용되는지 설명 할 수 있습니까?
답변
스크립트 /path/to/foo
가로 시작 하면 #!/bin/bash
실행 /path/to/foo arg1 arg2
은 실행 과 동일합니다 /bin/bash /path/too/foo arg1 arg2
. shebang 행이 있으면 #!/bin/bash -ex
실행과 같습니다 /bin/bash -ex /path/too/foo arg1 arg2
. 이 기능은 커널에 의해 관리됩니다.
(리눅스와 같은) 일부 유닉스 즉, 그래서 단지 하나 개의 인수를 허용 : 당신이 이식 오두막 줄에 하나의 인수를 가질 수 있음을 참고 #!/bin/bash -e -x
단일 오 문자 인수 수신 배쉬로 이어질 것입니다 -e -x
(구문 오류)가 아닌 두 개의 인수 -e
와 -x
.
Bourne 쉘 sh
및 POSIX sh, bash, ksh 및 zsh와 같은 파생 쉘의 경우 :
-e
즉, 명령이 실패하면 (0이 아닌 상태를 반환하여 표시됨) 스크립트가 즉시 종료됩니다.-x
쉘이 실행 추적을 인쇄하게합니다.
다른 프로그램은 이러한 옵션을 이해하지만 다른 의미를 가질 수 있습니다.
답변
이 경우 자세한 정보 를 bash
보기 help set
위해 전달 된 옵션입니다 .
-x Print commands and their arguments as they are executed.
-e Exit immediately if a command exits with a non-zero status.
답변
더 이식성이 좋은 대안과 같이 더 나은 방법을 언급하고 싶습니다.
#!/usr/bin/env bash
위의 예제 env
는 bash
실행 파일 을 찾는 데 사용 되며 항상에 있지는 않습니다 /bin/bash
. 예를 들어 오래된 #!/bin/bash
스크립트는 NixOS 에서 작동하지 않습니다 .
당신이 사용하는 경우 env
위의 입증 된 바와 같이, 당신은 같은 인수를 제공 할 수 없습니다 -e
에 bash
(내가 아는 한). 그러나 대신에 이것을 할 수 있습니다 :
#!/usr/bin/env bash
set -e