[bash] 인쇄되지 않고 배쉬 세트 + x

set +x인쇄되지 않고 bash에서 말할 수 있는지 아는 사람이 있습니까?

set -x
command
set +x

흔적

+ command
+ set +x

그러나 그것은 단지 인쇄되어야합니다

+ command

Bash는 버전 4.1.10 (4)입니다. 이것은 지금 당분간 나를 괴롭 히고 있습니다. 출력이 쓸모없는 set +x줄로 어수선 해져서 추적 기능이 유용하지 않게 만듭니다.



답변

나는 같은 문제가 있었고 서브 쉘을 사용하지 않는 해결책을 찾을 수있었습니다.

set -x
command
{ set +x; } 2>/dev/null


답변

서브 쉘을 사용할 수 있습니다. 서브 쉘을 종료하면 설정 x이 손실됩니다.

( set -x ; command )


답변

나는 최근에 짜증이 났을 때 이것에 대한 해결책을 해킹했습니다.

shopt -s expand_aliases
_xtrace() {
    case $1 in
        on) set -x ;;
        off) set +x ;;
    esac
}
alias xtrace='{ _xtrace $(cat); } 2>/dev/null <<<'

이를 통해 다음과 같이 xtrace를 활성화 및 비활성화 할 수 있습니다. 여기서 인수가 변수에 할당되는 방식을 로깅합니다.

xtrace on
ARG1=$1
ARG2=$2
xtrace off

그리고 다음과 같은 출력을 얻습니다.

$ ./script.sh one two
+ ARG1=one
+ ARG2=two


답변

@ user108471의 단순화 된 버전을 기반으로 한 솔루션은 어떻습니까?

shopt -s expand_aliases
alias trace_on='set -x'
alias trace_off='{ set +x; } 2>/dev/null'

trace_on
...stuff...
trace_off


답변

이것은 코드 블록을 포함하고 종료 상태를 보존 할 수있는 몇 가지 아이디어의 조합입니다.

#!/bin/bash
shopt -s expand_aliases
alias trace_on='set -x'
alias trace_off='{ PREV_STATUS=$? ; set +x; } 2>/dev/null; (exit $PREV_STATUS)'

trace_on
echo hello
trace_off
echo "status: $?"

trace_on
(exit 56)
trace_off
echo "status: $?"

실행시 :

$ ./test.sh
+ echo hello
hello
status: 0
+ exit 56
status: 56


답변