在鱼壳中管,stdout和stderr

Ant*_*ald 36 fish

我知道这已经有一段时间了,我发现了很多关于它的讨论,但是我没有得到最终的方法来完成它:管道,stdout和stderr.在bash中,这将是简单的:

cmd 2>&1 | cmd2
Run Code Online (Sandbox Code Playgroud)

gle*_*man 33

这种语法也适用于鱼类.演示:

$ function cmd1
      sh -c 'echo "this is stdout"; echo "this is stderr" >&2'
  end

$ function cmd2
      rev
  end

$ cmd1 | cmd2
this is stderr
tuodts si siht

$ cmd1 2>&1 | cmd2
rredts si siht
tuodts si siht
Run Code Online (Sandbox Code Playgroud)

您还cmd1 ^&1 | cmd2可以使用fish的stderr重定向符号.

文档:https://fishshell.com/docs/current/index.html#redirects

  • 重定向到一个文件,`echo meow>/tmp/meow 2>&1`适合我.在stdout重定向之后你需要stderr重定向. (14认同)

小智 15

根据这些文档,还有一个方便的快捷方式

&>

这是相关的引用(强调和空白,我的):

为了方便起见,可以使用重定向将 stdout和 stderr定向到同一目的地。例如:&>

echo hello &> all_output.txt
Run Code Online (Sandbox Code Playgroud)

将stdoutstderr重定向到文件 all_output.txt。这相当于echo hello > all_output.txt 2>&1.

  • 谢谢你!值得注意的是,不仅仅是 stdout 和 stderr,所有输出 FD 似乎都以此转发。我正在努力开发一个并行应用程序,该应用程序通过 &3 &4 等输出多个进程。 &> 获取所有进程,这非常有帮助。 (3认同)