在 .bashenv 中使用 shopt extdebug

在 .bashenv 中使用 shopt extdebug

我在 Linux 的 Windows 子系统中使用 Ubuntu。

通过此建议的方法回答我可以在启动新的非交互式 shell 时运行代码:

$ 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 版本中,并被删除。通常,从 Debian 中删除的软件包也会从 Ubuntu 中删除,除非有人选择为 Ubuntu 手动维护这些软件包,而在这种情况下,没有人这样做。

调试 shell 脚本的传统方法是使用set -x(或bash -x),它在这里仍然可以继续工作。

相关内容