Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中重定向管道输出_Bash - Fatal编程技术网

在bash中重定向管道输出

在bash中重定向管道输出,bash,Bash,在bash中运行此命令 echo hello | > ./out 文件/out为空,未打印任何内容 所以我想知道,这里到底发生了什么?我认为这是一个错误 谢谢, 这相当于: echo| true 总之,管道输出连接到一个子shell,但是像这样的重定向操作符是shell首先要执行的,并且由于没有对这个子shell的初始输入,您将得到一个空的a.out 即使是echo xxx |>a.out也会给你一个空的a.out文件 更清楚地说,>管道右侧的a.out表示子shell。在处理任何管道输

在bash中运行此命令

echo hello | > ./out
文件
/out
为空,未打印任何内容

所以我想知道,这里到底发生了什么?我认为这是一个错误

谢谢,
这相当于:

echo| true

总之,管道输出连接到一个子shell,但是像
这样的重定向操作符是shell首先要执行的,并且由于没有对这个子shell的初始输入,您将得到一个空的a.out

即使是
echo xxx |>a.out
也会给你一个空的a.out文件

更清楚地说,
>管道右侧的a.out
表示子shell。在处理任何管道输入之前,此子shell将首先执行重定向操作符


因此,问题的标题是错误的,您没有使用此命令重定向此处的任何管道输出。您只重定向在管道右侧调用的子shell的输出。

文档中只有
&
,您想实现什么?我通常会看到像
echo hello>out
这样的问题。请注意,堆栈溢出的范围是有限的,仅限于“实际的、可回答的”问题。为没有人会有意编写的代码定义行为是不切实际的,特别是当该行为未定义且可能在未通知的情况下更改时;对于未定义的行为,唯一正确的答案是“不要编写这样做的代码”。我不确定是否准确地说,
>a.out
意味着一个子shell,即使在依赖于管道的情况下进行了警告——在管道的右侧有任何命令意味着一个子shell,甚至没有重定向。@CharlesDuffy我从“这相当于
echo | true
开始,但我不确定这对于OP来说是可以理解的。这主要是指OP,重定向的右侧在任何情况下都意味着一个子shell。你认为我应该回到“等价于
echo | true
”吗(如果重定向失败,则为假)?我确实认为,您最初描述它的方式不太容易被错误理解。(它可能根本不被理解,但我认为这比认为一个人理解但实际上是错误的要好)。@CharlesDuffy我明白您的意思,我将编辑答案。