私の.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+()を押しました。_トラップのコマンドは空のコマンドであり、空の出力を生成するため、機能しません。命令置換が原因のようです。スペースやスペースで置き換えると、予期しないことが発生しないためです。\037
trap
$()
:
と空白の間の動作の違いを解釈する方法がわからない$()
ので、これはバグのように見えます。 bug-bashリストを大体検索しても何も出ませんでした。
答え2
これをあなたの~/.inputrc:
:
"\M-l": "ls -ltrF\r"