我正在寻找纯重击解决方案,以将数据从函数的标准输入复制到标准输出,而不进行处理。
目标是通过在输入之前和之后输出一些文本来修饰输入。
最干净的解决方案是使用cat
或tee
二进制文件。但是,根据要求,解决方案必须是纯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
}
如果我需要处理输入,此解决方案可能是可接受的。但这似乎有些矫kill过正,因为我只需要将stdin数据传递到stdout。
我尝试使用重定向:
redirect_stdin() {
IFS= printf '%s' "$(</dev/stdin)"
}
是否有一种简单的方法可以将数据从stdin传递到stdout?
稍微冗长,但没有循环,并保留最后的换行符:
redirect_stdin() {
readarray; printf "%s" "${MAPFILE[@]}"
}