Bash将命令的结果存储在变量中,并在使用here文档时将其打印到控制台

Bash将命令的结果存储在变量中,并在使用here文档时将其打印到控制台,bash,shell,heredoc,rman,Bash,Shell,Heredoc,Rman,我正在从Bash脚本运行rman命令。我使用here文档将命令传递给rman。我想捕获输出,但同时也要将其打印到控制台(实时)。 我找到了这个解决方案,但我不知道如何使它与这里的文档一起工作 VAR=$(ls | tee /dev/tty) 我目前运行的是: output=$(rman <<RMAN $rman_script RMAN ) output=$(rmanoutput=$(rmanhere文档与其他重定向没有区别,尽管语法当然略有不同 var=$(rman <&l

我正在从Bash脚本运行rman命令。我使用here文档将命令传递给rman。我想捕获输出,但同时也要将其打印到控制台(实时)。 我找到了这个解决方案,但我不知道如何使它与这里的文档一起工作

VAR=$(ls | tee /dev/tty)
我目前运行的是:

output=$(rman <<RMAN
$rman_script
RMAN
)

output=$(rman
output=$(rmanhere文档与其他重定向没有区别,尽管语法当然略有不同

var=$(rman <<\... | tee /dev/stderr
$rman_script
...
)

var=$(rman这看起来不太适合Bash脚本。也许可以用
output=$(echo“$rman_script”| rman)”重构一些丑陋之处
但对我来说,将输入收集到Bash变量中已经引入了一种可疑的味道(而且,将脚本也包含在变量中)。我想没有选择。我没有找到任何机制来更好地处理RMAN错误:(因此,唯一的选择是检查输出和返回代码。在变量中包含脚本有什么坏处?你能解释一下吗?我总是在运行之前这样做,我可以打印一些日志消息
echo“$RMAN\u script”
这个框太小,无法进行适当的解释,我读到了你问题中的一些字里行间的信息;但一个常见的错误是宁愿将结果存储在内存中,而不是将线性和可伸缩的处理存储在管道中,这通常是shell脚本中最自然的方式。
tee
允许你从ins打印到标准错误ide是一个管道。对于任何非平凡的处理,您可能位于控制结构中,如
if
while
,并且可以在操纵标准输入的其他命令之间简单地
回显“$0:diagnostic”>&2
。这不起作用-
第43行:警告:此处文档位于第43行,由文件结尾分隔(通缉
RMAN')`可能是您在

var=$(rman <<\... | tee /dev/stderr
$rman_script
...
)
var=$(rman <<<"$rman_script" | tee /dev/stderr)
rman_script () {
     rman <<\____HERE
         Actual script
         Probably multiple lines
____HERE
}

var=$(rman_script | tee /dev/stderr)