私は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
)を使用することですが、ここではまだ機能します。