Bash:キーバインディング/トラップの問題

Bash:キーバインディング/トラップの問題

私の.bashrcには次の内容があります。

# Alt+L lists current directory
bind -x "\"\el\":ls -ltrF --color=auto;"

# trap commands and echo them to xterm titlebar.
trap 'echo -ne "\033]0;$BASH_COMMAND - $USER@${HOSTNAME}>$(pwd)\007"' DEBUG

問題のデモ:

bash-4.2$ [Alt+L] #works
total 0
-rw-rw-r--  1 me 1234 0 Aug  3 07:11 foo
-rw-rw-r--  1 me 1234 0 Aug  3 07:11 bar
bash-4.2$ ls -ltr #fails first time
bash: -ltr: command not found
bar  foo
bash-4.2$ ls -ltr #works second time
total 0
-rw-rw-r--  1 me 1234 0 Aug  3 07:11 foo
-rw-rw-r--  1 me 1234 0 Aug  3 07:11 bar

ご覧のとおり、キーlsバインディングを実行した後に初めてコマンドが失敗します。これは罠と関係があると思います。トラップを削除すると問題が解決します。

トラップを削除せずにこの問題を解決する方法はありますか?

ベストアンサー1

私はこれをより小さな例として再現することができます。私はDebian squeezeでbash 4.1を試し、ソースでコンパイルされたbash 4.2.8(9)を試しました。

% bash --norc
bash-4.1$ echo $BASH_VERSION
4.1.5(1)-release
bash-4.1$ bind -x '"\037":echo foo;'
bash-4.1$ trap '$()' DEBUG
foo
bash-4.1$ echo bar
bash: bar: command not found

bash-4.1$

コマンドが返された直後にCtrl+()を押しました。_トラップのコマンドは空のコマンドであり、空の出力を生成するため、機能しません。命令置換が原因のようです。スペースやスペースで置き換えると、予期しないことが発生しないためです。\037trap$():

と空白の間の動作の違いを解釈する方法がわからない$()ので、これはバグのように見えます。 bug-bashリストを大体検索しても何も出ませんでした。

おすすめ記事