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

问题描述 投票:0回答:2

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

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

我目前运行的是:

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

你知道在这个RMAN例子中我怎么能将stdout打印到控制台除了将它存储在output变量中?任何帮助表示赞赏。干杯。

bash shell heredoc rman
2个回答
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)。


0
投票
output=$(rman <<RMAN)
$rman_script
RMAN

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

© www.soinside.com 2019 - 2024. All rights reserved.