bashがコマンドを編集して実行した後にデバッグトラップを印刷するのはなぜですか?

bashがコマンドを編集して実行した後にデバッグトラップを印刷するのはなぜですか?

bash(またはreadlineですか?)で説明できない動作を発見しました。 Readline コマンドの呼び出し後、edit-and-execute-command実行前にデバッグトラップコマンドが出力されます。これはバグですか?

デフォルトのbashインストールを使用して問題を再現する方法は次のとおりです(/ etcにドットファイル以外のドットファイルはなく、Linux、macOS、および私が見つけることができるすべてのbashバージョンで発生します)。

bash-5.0$ trap date DEBUG
bash-5.0$ echo hi
Fri May  1 23:07:38 PDT 2020
hi
bash-5.0$ echo hi

この時点で Control-X Control-E と入力します。エディタが開きます。エディタを終了します。以下は次のとおりです。

echo hi
date
Fri May  1 23:07:47 PDT 2020
hi
bash-5.0$ echo hi

date私の質問は、エディタを終了した後にシェルが印刷される理由があるかどうかです。

これが私にとって問題になるのは、ユーザーがコマンドを入力した後にiTerm2のシェル統合を実行する前に、デバッグトラップを使用してコマンドを実行するためです。https://github.com/rcaloras/bash-preexec。 AFAIK bashにはこれを行う他の方法はありません。 (たとえ選択肢が開いているが!)

文脈上、もともとここに現れました。https://gitlab.com/gnachman/iterm2/-/issues/8808#note_331367916

答え1

私はbashのソースコードでほぼ満足のいく答えを見つけるのに十分幸運でした。詳細な手順は次のとおりです。https://gitlab.com/gnachman/iterm2/-/issues/8808#note_335276685

関連情報