bash DEBUG 트랩이 및/또는 목록에 대해 한 번만 실행되도록 하시겠습니까?

bash DEBUG 트랩이 및/또는 목록에 대해 한 번만 실행되도록 하시겠습니까?

DEBUG다음과 같은 트랩을 설정했다고 가정해 보겠습니다.

unset PROMPT_COMMAND # don't want $PROMPT_COMMAND triggering DEBUG trap
trap 'printf %s\\n "most recent history line: $(history 1)" >&2' DEBUG

간단한 명령을 실행하면 명령이 stderr에 인쇄됩니다.

$ echo foo
most recent history line:   483  echo foo

그러나 및/또는 목록을 실행하면 DEBUG실행되는 각 목록 명령에 대해 한 번씩 트랩이 여러 번 호출됩니다.

$ echo foo && echo bar
most recent history line:   483  echo foo && echo bar
foo
most recent history line:   483  echo foo && echo bar
bar

DEBUG프롬프트에 입력된 각 명령(단순 또는 기타)에 대해 트랩을 한 번만 실행하는 방법이 있습니까 ? 그렇지 않은 경우 마지막으로 프롬프트가 그려진 이후에 트랩 코드가 실행되었는지 감지하는 가장 좋은 방법은 무엇입니까?

답변1

다음은 작동하지만 약간 혼란스러운 느낌이 듭니다(더 현명한 답변을 원했습니다).

PROMPT_COMMAND='at_prompt=t'
trap '
    [ -z "${at_prompt+set}" ] ||
    printf %s\\n "most recent history line: $(history 1)" >&2
    unset at_prompt
' DEBUG

관련 정보