如何覆盖 bash Ctrl+C 使其更像鱼

如何覆盖 bash Ctrl+C 使其更像鱼

我发现自己在远程计算机上更频繁地使用 bash,尽管fish它是我首选的 shell。 Fish 有一个小但很好的功能,当你按下 Ctrl+C 时,会发生这样的事情:

if command running
   send SIGINT
else
   clear line (don't start a new one)

如果能够在 bash 中执行此操作,那就太好了。

我想这将涉及捕获 SIGINT,它来自stty被配置为在按下 Ctrl+C 后发送它,但我还没有找到如何执行上面的伪代码。

我尝试过的

trap 'tput dl1' SIGINT

它会清除该行,但仍然继续开始新行/提示(就像在空提示上按 Enter 键一样)并执行此操作仅有的如果我没有浏览过历史记录:\

答案1

好吧,经过一番摆弄之后trap,tputterminfo,我想我已经明白了(感谢另一个问题)。

对于只有 1 行的标准命令行,例如bash-4.3$ echo something here

trap 'tput dl1; tput cuu1' SIGINT是我所需要的。

bash 将:

  • 删除该行
  • 向上移动光标

最后开始一个新行(因此向上移动光标)。

如果您的命令行有 2 行或更多行,例如

name@host /path/to/some/dir
$ echo something here

tput dl1; tput cuu1然后必须添加另一个,以删除多余的行 -->trap 'tput dl1; tput cuu1; tput dl1; tput cuu1' SIGINT

我想我会看看这是否有任何不利影响。

相关内容