[英]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.