Linux bash中的特殊管道/重定向

Linux bash中的特殊管道/重定向,linux,bash,scripting,piping,Linux,Bash,Scripting,Piping,(首先,我已经找了一个小时了,所以我很确定这不会重复) 我需要编写一个脚本,执行1个命令1次,然后执行以下操作: 将stdout和stderr保存到一个文件中(同时保持它们的正确顺序) 仅将stderr保存到变量 如果我有这样一个文件,请详细说明第1点 echo "one" thisisanerrror echo "two" thisisanotherError 我希望看到输出,然后是错误,然后是输出,然后是更多的错误(因此串联是不够的) 最接近我的是以下内容,它似乎损坏了日志文件: errs

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

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

  • 将stdout和stderr保存到一个文件中(同时保持它们的正确顺序)
  • 仅将stderr保存到变量
  • 如果我有这样一个文件,请详细说明第1点

    echo "one"
    thisisanerrror
    echo "two"
    thisisanotherError
    
    我希望看到输出,然后是错误,然后是输出,然后是更多的错误(因此串联是不够的)

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

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

    这可能是一个起点:

    编辑:

    这似乎有效:

    (/foo.sh)2>(tee>(cat)>&2))>foo.log
    
    将stderr与tee分开,将一个副本写入stdout(cat),将另一个副本写入stderr。之后,您可以获取所有标准输出并将其写入文件

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

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

    我还看到了附加的双引号中包含的命令,但我不知道这有什么好处。

    (/test.sh2>>(tee/dev/fd/3>/dev/fd/2))3>&1 2>错误。日志1>&2似乎在mac上也可以工作,但在linux机器上会导致损坏记住,我希望stderr以变量结束。我不想从一个文件中读取它,因为如果同时运行多个副本,这会引入一个失败点。好的,但是我如何在一次执行时同时执行这两个副本(这是一个不能运行两次的脚本)?第二个示例似乎没有写入文件。