인형을위한 배쉬 셰방? 정기적으로 #!/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 쉘이 실행 추적을 인쇄하게합니다.

다른 프로그램은 이러한 옵션을 이해하지만 다른 의미를 가질 수 있습니다.


답변

이 경우 자세한 정보 를 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

위의 예제 envbash실행 파일 을 찾는 데 사용 되며 항상에 있지는 않습니다 /bin/bash. 예를 들어 오래된 #!/bin/bash스크립트는 NixOS 에서 작동하지 않습니다 .

당신이 사용하는 경우 env위의 입증 된 바와 같이, 당신은 같은 인수를 제공 할 수 없습니다 -ebash(내가 아는 한). 그러나 대신에 이것을 할 수 있습니다 :

#!/usr/bin/env bash
set -e