将stdin复制到纯Bash中的stdout中

问题描述 投票:0回答:1

我正在寻找纯重击解决方案,以将数据从函数的标准输入复制到标准输出,而不进行处理。

目标是通过在输入之前和之后输出一些文本来修饰输入。

最干净的解决方案是使用cattee二进制文件。但是,根据要求,解决方案必须是纯Bash。

我当前的解决方案

目前,我的解决方案是使用内置的read

read_and_print() {
    local line

    while IFS= read -r line; do
        printf '%s\n' "$line"
    done

    if ((${#line} > 0)); then
        printf '%s' "$line"
    fi
}

缺点

  • shell处理数据,
  • 使用循环和条件构造。

如果我需要处理输入,此解决方案可能是可接受的。但这似乎有些矫kill过正,因为我只需要将stdin数据传递到stdout。

我目前的潜在客户

我尝试使用重定向:

redirect_stdin() {
    IFS= printf '%s' "$(</dev/stdin)"
}

优点

  • 代码更简洁,
  • 无循环结构。

缺点

  • 当来自stdin的数据以换行符结尾时,将不保留它。

是否有一种简单的方法可以将数据从stdin传递到stdout?

bash stdout stdin
1个回答
0
投票

稍微冗长,但没有循环,并保留最后的换行符:

redirect_stdin() {
    readarray; printf "%s" "${MAPFILE[@]}"
}
© www.soinside.com 2019 - 2024. All rights reserved.