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 列表上粗略搜索没有发现任何结果。

答案2

把这个放在你的~/.inputrc:

"\M-l":    "ls -ltrF\r"

相关内容