我正在运行来自Bash脚本的rman命令。我使用这里的文件将命令传递给rman。我想捕获输出,但同时也将它打印到控制台(实时)。我找到了这个解决方案,但我不知道如何使用here-docs。
VAR=$(ls | tee /dev/tty)
我目前运行的是:
output=$(rman <<RMAN
$rman_script
RMAN
)
你知道在这个RMAN例子中我怎么能将stdout打印到控制台除了将它存储在output
变量中?任何帮助表示赞赏。干杯。
这里的文档与其他重定向没有什么不同,虽然语法当然略有不同。
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)
你会注意到我使用/dev/stderr
而不是/dev/tty
。除非你的脚本非常短而且简单,并且只有交互式使用才有意义,否则应该避免使用脚本需要和删除你的tty(密码操作会被想到作为一个有时很难避免的soenario)。
output=$(rman <<RMAN)
$rman_script
RMAN
请注意,HERE文档在语法上看起来像输入重定向,只有你有<<
而不是<
。输入将从后续行中获取。