주로 사용하는 설정이있는 bash 스크립트가 있습니다.
#!/bin/bash
하지만 저는 정기적으로
#!/bin/bash -e
#!/bin/bash -x
#!/bin/bash -ex
등등.
누군가이 세방 옵션의 의미와 이점과 다른 세방에 적용되는지 설명 할 수 있습니까?
주로 사용하는 설정이있는 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
쉘이 실행 추적을 인쇄하게합니다.다른 프로그램은 이러한 옵션을 이해하지만 다른 의미를 가질 수 있습니다.
더 이식성이 좋은 대안과 같이 더 나은 방법을 언급하고 싶습니다.
#!/usr/bin/env bash
위의 예제 env
는 bash
실행 파일 을 찾는 데 사용 되며 항상에 있지는 않습니다 /bin/bash
. 예를 들어 오래된 #!/bin/bash
스크립트는 NixOS 에서 작동하지 않습니다 .
당신이 사용하는 경우 env
위의 입증 된 바와 같이, 당신은 같은 인수를 제공 할 수 없습니다 -e
에 bash
(내가 아는 한). 그러나 대신에 이것을 할 수 있습니다 :
#!/usr/bin/env bash
set -e
env
사용은 기본이 경우 단순히 모르기 때문에 실행 파이썬 것을 스크립트에 대한 좋은 특히 아니다 python
버전 2 또는 3이고, 그 특정 버전을 필요로 스크립트 차이의 세계를 만든다. 교묘 한 것보다 명백하게하는 것이 좋습니다