2

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

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

我目前运行的是:

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

您知道在这个 RMAN 示例中,除了将标准输出存储在output变量中之外,我还可以如何将标准输出打印到控制台?任何帮助表示赞赏。干杯。

4

2 回答 2

2

这里的文档与其他重定向没有什么不同,尽管语法当然略有不同。

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)。

于 2017-12-21T16:04:32.750 回答
0
output=$(rman <<RMAN)
$rman_script
RMAN

请注意,HERE 文档在语法上看起来像输入重定向,只是您拥有<<的不是<. 输入将从后续行中获取。

于 2017-12-21T12:45:28.677 回答