저는 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
)을 사용하는 것인데, 여기서는 여전히 작동합니다.