我发现自己在远程计算机上更频繁地使用 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
,tput
和terminfo
,我想我已经明白了(感谢另一个问题)。
对于只有 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
我想我会看看这是否有任何不利影响。