我在 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
),它在这里仍然可以继续工作。