我想防止在按下 Ctrl+C 时将“^C”输出到终端。我正在捕获这样的中断命令:c := make(chan os.Signal, 1)signal.Notify(c, os.Interrupt)signal.Notify(c, syscall.SIGTERM)go func() { <-c // exit code here}()...但是,当我按 Ctrl+C 时,“^C”会输出到终端中。这并不理想。
2 回答
红颜莎娜
TA贡献1842条经验 获得超12个赞
如果你之后打印一些东西,你可以这样做
fmt.Print("\r")
log.Println("Shutting down")
\r是回车符;它告诉您的终端模拟器在行首移动光标。这样您就可以覆盖^C终端上的 。
鸿蒙传说
TA贡献1865条经验 获得超7个赞
如果您将终端置于原始模式,您将直接获得击键并且 tty 不会解释它们(并显示 ^C)。
我不确定在 Go 中设置原始模式的最佳方法,但 golang.org/x/crypto/ssh/terminal 的 RawMode() 做到了。然后您必须启用 INT 和 TERM 处理,否则您将收到 ^C 作为输入,而不是将其作为中断处理。
原始模式的解释在这里:https : //unix.stackexchange.com/questions/21752/what-s-the-difference-between-a-raw-and-a-cooked-device-driver
类似的答案在这里:https : //superuser.com/questions/147013/how-to-disable-c-from-being-echoed-on-linux-on-ctrl-c
- 2 回答
- 0 关注
- 221 浏览
添加回答
举报
0/150
提交
取消