.bashenv에서 shopt extdebug 사용

.bashenv에서 shopt extdebug 사용

저는 Linux용 Windows 하위 시스템 내에서 Ubuntu를 사용하고 있습니다.

이 제안된 방법으로답변새로운 비대화형 셸을 시작할 때 코드를 실행할 수 있습니다.

$ cat ~/.bashenv
if [[ $- != *i* ]]; then
  echo foo
fi
$ export BASH_ENV=~/.bashenv
$ bash -c 'echo bar'
foo
bar

이제 shopt extdebug의 트랩 기능을 활성화하려고 합니다.

나는 다음과 같은 것을 시도했습니다 :

$ cat ~/.bashenv
#!/bin/bash
say_foo() {
  echo "foo"
}
set -T
trap 'say_foo' DEBUG
shopt -s extdebug
$ export BASH_ENV=~/.bashenv
$ bash -c 'echo bar'
foo
bash: /usr/share/bashdb/bashdb-main.inc: No such file or directory
bash: warning: cannot start debugger; debugging mode disabled
foo
bar

이 문제를 해결할 방법이 있나요?


동일한 문제를 재현하는 더 짧은 방법:

$ bash --debugger -c 'echo hello'
bash: /usr/share/bashdb/bashdb-main.inc: No such file or directory
bash: warning: cannot start debugger; debugging mode disabled
hello

(인라인 bash스크립트를 실행하는 것은 파일에서 설정을 읽는 것과 같습니다 --debugger.)extdebug$BASH_ENV

답변1

bash 디버거는 Debian 및 Ubuntu에서 bashdb.그리고 삭제됐어요. 일반적으로 Debian에서 제거된 패키지는 Ubuntu에서 수동으로 유지 관리하도록 선택하지 않는 한 Ubuntu에서도 제거됩니다. 이 경우에는 아무도 그렇게 하지 않습니다.

쉘 스크립트를 디버깅하는 전통적인 방법은 set -x(또는 bash -x)을 사용하는 것인데, 여기서는 여전히 작동합니다.

관련 정보