当我正在向我选择的 shell 输入一行时,又改变了主意,我可以快速地放弃C-c
并重新开始。下面bash
是这样的:
user@machine:~$ rm everything^C
user@machine:~$
但在 上zsh
,我总体上更喜欢它,什么都没有显示:
(~) rm -rf /
(~)
是的,您可能明白为什么我希望在该行上看到插入符号 C 或类似的消息,这样我就不会混淆哪一行实际已执行并且已存在于历史记录中。
这个小问题基本上无法通过 Google 解决。
答案1
您可以定义一个陷阱信号情报(由 触发CTRL-C
),它将打印^C
(或您想要的任何其他文本):
TRAPINT() {
print -n "^C"
return $(( 128 + $1 ))
}
此示例取自man zshmisc
。 return 命令具有以下背景:
被未捕获信号终止的程序通常返回状态 128 加上信号编号。因此 [上述代码] 导致 SIGINT 的处理程序打印一条消息,然后模拟信号的通常效果。