linux - bash 中的特殊管道/重定向

标签 linux bash scripting piping

(首先,我已经找了一个小时,所以我很确定这不是重复)

我需要编写一个脚本来执行 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 `

最佳答案

这可能是一个起点:

How do I write stderr to a file while using "tee" with a pipe?

编辑:

这似乎可行:

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

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

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

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

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

关于linux - bash 中的特殊管道/重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12361119/

相关文章:

linux - 如何在 Google Chrome 中确保我的网站安全?

linux - 由于总线错误,无法使用 Anaconda 运行 tensorflow GPU

bash - 为什么子 shell 中的 stderr 没有被抑制或重定向?

linux - 尝试在脚本中重定向

linux - 通过 ssh 登录且用户是 sudo 用户时无法访问 authorized_keys

c++ - Linux编程环境配置

windows - mxmlc 在 linux 和 windows 下编译不同?

bash - 在 shell 中比较变量和整数?

php - curl: 未指定 URL - -F: 未找到命令

linux - 使用 root 的 SSH 密码脚本