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_Redirect_Stdout - Fatal编程技术网

Bash 重定向多个标准输出

Bash 重定向多个标准输出,bash,redirect,stdout,Bash,Redirect,Stdout,我在一个名为1,2,3的目录中有三个文件 其中包括: asdfg qwerty zxcvb 其中包括: asdfg qwerty zxcvb 其中三项包括: asdfg qwerty zxcvb 当我发出以下命令时: $ls > One > Two > Three $cat One $cat Two $cat Three 然后我发出以下命令: $ls > One > Two > Three $cat One $cat Two $

我在一个名为1,2,3的目录中有三个文件

其中包括:

asdfg
qwerty
zxcvb
其中包括:

asdfg
qwerty
zxcvb
其中三项包括:

asdfg
qwerty
zxcvb
当我发出以下命令时:

$ls > One > Two > Three
$cat One
$cat Two
$cat Three
然后我发出以下命令:

$ls > One > Two > Three
$cat One
$cat Two
$cat Three
输出:

Nothing
Nothing
One
Three
Two
然后我发出以下命令:

$ls > One > Two > Three
$cat One
$cat Two
$cat Three
输出:

Nothing
Nothing
One
Three
Two
然后我发出以下命令:

$ls > One > Two > Three
$cat One
$cat Two
$cat Three
输出:

Nothing
Nothing
One
Three
Two

有人能解释一下这里发生了什么事吗?为什么文件1和2变为空,为什么ls命令的输出只写入文件3?

您只能重定向一次。第一个重定向打开第一个文件进行写入(删除以前的任何内容),然后在下一个重定向覆盖它时立即关闭它

您似乎正在寻找
tee
命令。

如前所述
bash
不支持多路复用,也不支持多路复用。您看到的效果是每个文件都被打开,这意味着所有内容都被销毁。当指定了多个重定向时,它们会立即再次关闭,只保留最后一个重定向并实际接收任何数据

下面是运行该命令的
strace
的摘录:

strace -f -e open,dup2,close bash -c 'ls > one > two > three'
。。。
打开(“一”,O|u WRONLY | O|u create | O|u TRUNC | O|u LARGEFILE,0666)=3
dup2(3,1)=1
关闭(3)=0
打开(“两个”,O|u WRONLY | O|u create | O|u TRUNC | O|u LARGEFILE,0666)=3
dup2(3,1)=1
关闭(3)=0
打开(“三”,O|u WRONLY | O|u create | O|u TRUNC | O|u LARGEFILE,0666)=3
dup2(3,1)=1
关闭(3)=0
...
如您所见,bash不断覆盖相同的文件描述符。因此,只有最后一个将接收任何数据。一种解决方法是使用
tee
,它将在
stdin
上接收到的内容写入其所有参数和
stdout

ls | tee一二三>/dev/null
另一方面,
zsh
确实支持这一点:

zsh$setopt多操作系统
zsh$ls>1>2>3

我们只能猜测您的真实意图。请编辑您的问题以包含预期输出。祝你好运