猿问

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

我想防止在按下 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”会输出到终端中。这并不理想。


森林海
浏览 222回答 2
2回答

红颜莎娜

如果你之后打印一些东西,你可以这样做fmt.Print("\r")log.Println("Shutting down")\r是回车符;它告诉您的终端模拟器在行首移动光标。这样您就可以覆盖^C终端上的 。

鸿蒙传说

如果您将终端置于原始模式,您将直接获得击键并且 tty 不会解释它们(并显示 ^C)。我不确定在 Go 中设置原始模式的最佳方法,但 golang.org/x/crypto/ssh/terminal 的 RawMode() 做到了。然后您必须启用 INT 和 TERM 处理,否则您将收到 ^C 作为输入,而不是将其作为中断处理。原始模式的解释在这里:https&nbsp;:&nbsp;//unix.stackexchange.com/questions/21752/what-s-the-difference-between-a-raw-and-a-cooked-device-driver类似的答案在这里:https&nbsp;:&nbsp;//superuser.com/questions/147013/how-to-disable-c-from-being-echoed-on-linux-on-ctrl-c
随时随地看视频慕课网APP

相关分类

Go
我要回答