繁体   English   中英

如何捕获所有bash输出(从脚本内部)到变量中,然后将输出返回到stdout?

[英]How capture all bash output (from inside a script) into variable and then turn output back to stdout?

我有一个运行其他命令(例如docker)的bash脚本。 我希望脚本能够将所有输出捕获到变量中,然后在末尾回显自定义返回。

例:

#!/usr/bin/env bash
set -euo pipefail

# Capture into this (PSEUDO CODE)
declare CapturedOutput
$(Capture Output > CapturedOutput)

# Run some commands like...
docker-compose ... up -d

# Stop capturing (PSEUDO CODE)
$(Stop Capture Output > CapturedOutput)

echo "something"

因此,如果有人调用了我的脚本(如./runit.sh并且./runit.sh命令输出了,他们将看不到它,而只会看到:

> ./runit.sh

something

将输出捕获到变量中最直接的方法是使用命令替换。 您可以轻松地将其包装在一大段脚本中:

#!/usr/bin/env bash
set -euo pipefail

# To capture standard error, too:
# exec 3>&2 2>&1

CapturedOutput=$(

# Run some commands like...
docker-compose ... up -d

)

# To restore standard error:
# exec 2>&3- 

echo "something"

需要注意的是,从中捕获输出的命令在子shell中运行,但是我很难想出另一种方法来捕获到运行命令本身的shell中的变量中。

我认为您想查看bash手册页上的“命令替换”部分。

要将问题中的伪代码转换为bash的格式,例如:

CapturedOutput=$(docker-compose ... up -d)
CapturedOutput=$CapturedOutput $(docker-compose ... up -d)
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM