0

(首先我一直在寻找一个小时,所以我很确定这不是重复)

我需要编写一个执行 1 个命令、1 次的脚本,然后执行以下操作:

  1. 将 stdout 和 stderr 都保存到文件中(同时保持它们的正确顺序)
  2. 仅将 stderr 保存到变量中。

如果我有这样的文件,请详细说明第 1 点

echo "one"
thisisanerrror
echo "two"
thisisanotherError

我应该期望看到输出,然后是错误,然后是输出,然后是更多错误(因此连接是不够的)。

我最接近的是以下内容,它似乎损坏了日志文件:

errs=`((./someCommand.sh 2>&1 1>&3) | tee /dev/stderr ) 3>file.log 2>&3 `
4

1 回答 1

1

这可能是一个起点:

如何在使用带有管道的“tee”时将 stderr 写入文件?

编辑:

这似乎有效:

((./foo.sh) 2> >(tee >(cat) >&2)) > foo.log

用 tee 拆分 stderr,将一份副本写入 stdout (cat),将另一份写入 stderr。之后,您可以获取所有标准输出并将其写入文件。

编辑:将输出存储在变量中

varx=`((./foo.sh) 2> >(tee >(cat) >&2))`

我还看到用额外的双引号括起来的命令,但我不知道这可能有什么好处。

于 2012-09-11T00:35:19.420 回答