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

时间:2017-12-21 10:30:08

标签: bash shell heredoc rman

我正在运行来自Bash脚本的rman命令。我使用这里的文件将命令传递给rman。我想捕获输出,但同时也将它打印到控制台(实时)。 我找到了这个解决方案,但我不知道如何使用here-docs。

VAR=$(ls | tee /dev/tty)

我目前的运作是:

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

你知道在这个RMAN示例中我如何将stdout打印到控制台,除了将它存储在output变量中?任何帮助表示赞赏。 欢呼声。

2 个答案:

答案 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文档在语法上看起来像输入重定向,只有<<而不是<。输入将从后续行中获取。