相关疑难解决方法(0)

将stdout捕获到变量但仍在控制台中显示它

我有一个bash脚本调用几个长时间运行的进程.我想根据处理原因将这些调用的输出捕获到变量中.但是,因为这些是长时间运行的进程,所以我希望rsync调用的输出实时显示在控制台中,而不是事后.

为此,我找到了一种方法,但它依赖于将文本输出到/ dev/stderr.我觉得输出到/ dev/stderr并不是一种好的做事方式.

VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee /dev/stderr)

VAR2=$(rsync -r -t --out-format='%n%L' --delete -s /path/source1/ /path/target1 | tee /dev/stderr)

VAR3=$(rsync -r -t --out-format='%n%L' --delete -s /path/source2/ /path/target2 | tee /dev/stderr)
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我调用rsync几次,我想看到文件名在处理时,但最后我还是想在变量中输出,因为我稍后会解析它.

是否有一种"更清洁"的方式来实现这一目标?

如果它有所作为,我使用的是Ubuntu 12.04,bash 4.2.24.

bash ubuntu tee process-substitution

66
推荐指数
5
解决办法
3万
查看次数

标签 统计

bash ×1

process-substitution ×1

tee ×1

ubuntu ×1