为了账号安全,请及时绑定邮箱和手机立即绑定

防止 ^C 在 Go 中显示在 Ctrl+C 上

防止 ^C 在 Go 中显示在 Ctrl+C 上

Go
森林海 2021-11-29 16:45:34
我想防止在按下 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终端上的 。


查看完整回答
反对 回复 2021-11-29
?
鸿蒙传说

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


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信