我正在运行来自Bash脚本的rman命令。我使用这里的文件将命令传递给rman。我想捕获输出,但同时也将它打印到控制台(实时)。 我找到了这个解决方案,但我不知道如何使用here-docs。
VAR=$(ls | tee /dev/tty)
我目前的运作是:
output=$(rman <<RMAN
$rman_script
RMAN
)
你知道在这个RMAN示例中我如何将stdout打印到控制台,除了将它存储在output
变量中?任何帮助表示赞赏。
欢呼声。
答案 0 :(得分:1)
这里的文档与其他重定向没什么不同,虽然语法当然略有不同。
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)。
答案 1 :(得分:0)
output=$(rman <<RMAN)
$rman_script
RMAN
请注意,HERE文档在语法上看起来像输入重定向,只有<<
而不是<
。输入将从后续行中获取。