bash - 如何使用Bash自动执行两个OS.Stdin输入

标签 bash go

我需要自动化类似波纹管的代码段的输入,其中ReadString的输入是不同的。

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    buf := bufio.NewReader(os.Stdin)
    value, err := buf.ReadString('\n')
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(value)
    }

    buf = bufio.NewReader(os.Stdin)
    value, err = buf.ReadString('\n')
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(value)
    }
}

我尝试了几种格式,像下面的this question回答下面的问题,不幸的是,没有一种有效。
>> echo "data1
data2" | go run main.go
output: data1

        EOF

此处data1data2和单独的ReadString方法的输入。我无法控制源代码。因此,我只能尝试更改bash输入。如何解决这个问题?

最佳答案

发生这种情况是因为第二个字符串没有以换行符结尾。查看ReadString的文档:

如果ReadString在找到定界符之前遇到错误,它将返回错误之前读取的数据和错误本身(通常为io.EOF)。

因此,即使错误不是非零,您也有数据。以下更改应适用于此特定情况:

buf = bufio.NewReader(os.Stdin)
value, err = buf.ReadString('\n')
if value!="" {
    fmt.Println(value)
}
if err != nil {
    fmt.Println(err)
}

通常,即使从ReadString遇到错误,也可能从函数返回非空数据。

关于bash - 如何使用Bash自动执行两个OS.Stdin输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60156913/

相关文章:

linux - bash - 用引号将所有数组元素或参数括起来

bash - 在 Bash 脚本中,每次调用 'stress' 应用程序都会运行两次。导致内存泄漏

unit-testing - 是否可以模拟从 golang 中的包导入的函数?

用于查找总磁盘和硬盘驱动器编号的 linux 命令

bash - 控制在 UNIX shell 上运行的后台作业数

go - 如何用马提尼输出 CSV?

go - 如何将变量作为 shell 脚本文件运行

甲骨文 ORA-00933 : SQL command not properly ended

golang simplejson mustint64 不会从字符串转换为 int64

bash - 从 bash 到 `function` 的 fish shell 和执行程序