无法从 Golang 运行 bash `read` 命令
Can not run bash `read` command from Golang
我尝试使用基本的 bash 命令 read
从键盘捕获单个字符。但是我尝试了几种方法似乎都很难得到输出。
示例代码:
fmt.Println(exec.Command("read", "-t", "5", "-n", "1").Output())
其含义是"waiting for 5 seconds to get 1 input character from the keyboard"。从上面的代码中,我希望看到我的输入字符及其错误一起打印出来,但我得到的是
输出:
[] exit status 1
此输出在不到 1 秒的时间内立即打印出来,这与 read
命令的 "-t", "5"
参数冲突,后者代表等待 5 秒。我尝试在 1 秒内输入一些字符,但它似乎根本不起作用。
顺便说一句,如果试试这个
fmt.Println(exec.Command("echo", "\"Hi!\"").Output())
输出:
[34 104 105 34 10] <nil>
这里似乎可以用简单的echo
。
您没有使用 stdin 提供命令,因此它无法读取任何内容并立即退出。
如果你想把它连接到与调用程序相同的标准输入,你可以使用:
cmd := exec.Command("read", "-t", "5", "-n", "1")
cmd.Stdin = os.Stdin
out, err := cmd.CombinedOutput()
fmt.Println("error:", err)
fmt.Printf("output: %q\n", out)
但是这不会输出任何内容,因为 /usr/bin/read
脚本不会打印任何内容。您可能希望在 shell 的上下文中调用 shell 内置函数 read
。这将打印字符 read:
cmd := exec.Command("bash", "-c", "read -t 5 -n 1 C && echo -n $C")
cmd.Stdin = os.Stdin
但最后,您可能应该直接从 stdin 中读取。
我尝试使用基本的 bash 命令 read
从键盘捕获单个字符。但是我尝试了几种方法似乎都很难得到输出。
示例代码:
fmt.Println(exec.Command("read", "-t", "5", "-n", "1").Output())
其含义是"waiting for 5 seconds to get 1 input character from the keyboard"。从上面的代码中,我希望看到我的输入字符及其错误一起打印出来,但我得到的是
输出:
[] exit status 1
此输出在不到 1 秒的时间内立即打印出来,这与 read
命令的 "-t", "5"
参数冲突,后者代表等待 5 秒。我尝试在 1 秒内输入一些字符,但它似乎根本不起作用。
顺便说一句,如果试试这个
fmt.Println(exec.Command("echo", "\"Hi!\"").Output())
输出:
[34 104 105 34 10] <nil>
这里似乎可以用简单的echo
。
您没有使用 stdin 提供命令,因此它无法读取任何内容并立即退出。
如果你想把它连接到与调用程序相同的标准输入,你可以使用:
cmd := exec.Command("read", "-t", "5", "-n", "1")
cmd.Stdin = os.Stdin
out, err := cmd.CombinedOutput()
fmt.Println("error:", err)
fmt.Printf("output: %q\n", out)
但是这不会输出任何内容,因为 /usr/bin/read
脚本不会打印任何内容。您可能希望在 shell 的上下文中调用 shell 内置函数 read
。这将打印字符 read:
cmd := exec.Command("bash", "-c", "read -t 5 -n 1 C && echo -n $C")
cmd.Stdin = os.Stdin
但最后,您可能应该直接从 stdin 中读取。