"bash +x script.sh"의 "+x" 옵션은 무엇을 의미하나요?

"bash +x script.sh"의 "+x" 옵션은 무엇을 의미하나요?

나는 그것이 무엇을 bash -x하는지 알고 있지만, 그것은 무엇을 하는가 bash +x?

Google 검색에서는 결과가 나오지 않았으며 설명서에는 이에 대한 언급이 없습니다.

답변1

-x, 그것은 같다-o xtrace 만들다옵션 xtrace.

+x, 그것은 같다+o xtrace 장애를 입히다그것.

이러한 옵션을 인터프리터에 전달하여 시작 시 활성화/비활성화하거나 ( set/// set -o xtrace) 에 전달 set -x하여 런타임 시 활성화/비활성화할 수 있습니다.set +o xtraceset +x

그러나 옵션 측면에서 xtrace옵션은 다음과 같습니다.아니요$SHELLOPTS기본적으로 활성화되어 있으며 bash는 env 변수 또는 경로가 저장된 초기화 파일보다 먼저 명령줄 옵션을 처리하므로 $BASH_ENVbash옵션 을 +x호출하는 것은 의미가 없습니다 .

$ cat env
set -o xtrace
$ BASH_ENV=env bash +x -c 'echo foo'
+ echo foo
foo
$ env SHELLOPTS=xtrace bash +x -c 'echo foo'
+ echo foo
foo

두 경우 모두 설정을 통과하거나 취소할 수 있는 +x방법이 없습니다 .set -o xtrace$BASH_ENV$SHELLOPTS

-xor 이후에만 작동합니다 -o xtrace.

$ bash -x +x -c 'echo foo'
foo

따라서 (가능성 없음)이 있는 경우 bash +x ./script.sh1이 의미가 있을 수 있습니다.alias bash='bash -x'

하지만 다음과 같이 할 수 있습니다.

$ bash +B -c 'echo {a,b}'
{a,b}

braceexpand이 옵션을 비활성화하려면기본적으로 활성화되어 있습니다.

아니면 이렇게 할 수도 있습니다:

$ env SHELLOPTS=xtrace bash -c 'set +x; echo foo'
+ set +x
foo

장애를 입히다xtrace 뒤쪽에처리 중에 활성화됩니다 $SHELLOPTS.


1 현재 디렉토리에서 찾을 수 없을 때 검색을 ./방지해야 합니다 .bashscript.sh$PATH

관련 정보