【发布时间】:2016-05-30 17:01:59
【问题描述】:
我知道这一直是一个问题,并且我发现了很多关于它的讨论,但是我没有得到最终完成它的方法:管道,stdout 和 stderr。在 bash 中,这很简单:
cmd 2>&1 | cmd2
【问题讨论】:
标签: fish
我知道这一直是一个问题,并且我发现了很多关于它的讨论,但是我没有得到最终完成它的方法:管道,stdout 和 stderr。在 bash 中,这很简单:
cmd 2>&1 | cmd2
【问题讨论】:
标签: fish
该语法也适用于鱼。一个演示:
$ function cmd1
echo "this is stdout"
echo "this is stderr" >&2
end
$ function cmd2
rev
end
$ cmd1 | cmd2
this is stderr
tuodts si siht
$ cmd1 &| cmd2
rredts si siht
tuodts si siht
文档:https://fishshell.com/docs/current/language.html#redirects
【讨论】:
echo meow > /tmp/meow 2>&1 适合我。你需要在 stdout 重定向之后进行 stderr 重定向。
cmd1 中使用sh -c,而echo "this is stdout"; echo "this is stderr" >&2 可以正常工作
还有一个方便的快捷方式,根据这些docs
&>这是相关的引用(重点和空白,我的):
为方便起见,重定向
&>可用于引导两个标准输出 和 stderr 到同一个目的地。例如:echo hello &> all_output.txt将 stdout 和 stderr 都重定向到文件
all_output.txt。这相当于echo hello > all_output.txt 2>&1。
【讨论】:
&> 中的 > 很容易记住,一旦你知道它“得到他们所有”,因为它看起来像一个漏斗(或者,正如我们在小学时学到的,一条鳄鱼)吞噬了所有的输出。 ??