猿问

无法从 Golang 运行 bash `read` 命令

我尝试使用基本的 bash 命令read从键盘捕获单个字符。但是即使我尝试了多种方法,似乎也很难获得输出。

示例代码:

fmt.Println(exec.Command("read", "-t", "5", "-n", "1").Output())

它的意思是“等待 5 秒从键盘获取 1 个输入字符”。从上面的代码中,我希望看到我的输入字符与其错误一起打印出来,但我得到的是

输出:

[] exit status 1

此输出仅在不到 1 秒的时间内立即打印,这与代表等待 5 秒"-t", "5"read命令参数冲突。我尝试在 1 秒内输入一些字符,但似乎根本不起作用。

顺便说一句,如果试试这个

fmt.Println(exec.Command("echo", "\"Hi!\"").Output())

输出:

[34 104 105 34 10] <nil>

在这里似乎在这里工作很简单echo


萧十郎
浏览 134回答 1
1回答

烙印99

您没有提供带有 stdin 的命令,因此它无法读取任何内容并立即退出。如果您想将它与调用程序连接到相同的标准输入,您可以使用:cmd := exec.Command("read", "-t", "5", "-n", "1")cmd.Stdin = os.Stdinout, err := cmd.CombinedOutput()fmt.Println("error:", err)fmt.Printf("output: %q\n", out)然而,这不会输出任何内容,因为/usr/bin/read脚本不会打印任何内容。您可能希望在 shellread的上下文中调用内置的 shell。这将打印字符读取:cmd := exec.Command("bash", "-c", "read -t 5 -n 1 C && echo -n $C")cmd.Stdin = os.Stdin但最后,您可能应该直接从 go 中的 stdin 读取。
随时随地看视频慕课网APP

相关分类

Go
我要回答