Bash将命令的结果存储在变量中,并在使用here文档时将其打印到控制台
我正在从Bash脚本运行rman命令。我使用here文档将命令传递给rman。我想捕获输出,但同时也要将其打印到控制台(实时)。 我找到了这个解决方案,但我不知道如何使它与这里的文档一起工作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
VAR=$(ls | tee /dev/tty)
我目前运行的是:
output=$(rman <<RMAN
$rman_script
RMAN
)
output=$(rmanoutput=$(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)