考虑以下示例:
exec 10>&2 # duplicate STDERR to fd 10
{ echo ok; inexistantcommand; } > /tmp/both 2>&1 10>/tmp/err
exec 10>&- # close fd 10
我希望 /tmp/err 有错误,但它是空白的:
$ cat /tmp/both
ok
-bash: inixistantcommand: command not found
$ cat /tmp/err
$
我做错了什么?
编辑:
试过:
{ echo ok; qsdfghjk; } &> >(tee /tmp/both) 2>/tmp/err
但是 /tmp/both 只有STDOUT
这似乎是关于从流中复制数据而不是复制文件描述符。数据流被复制
tee
。这会将字符串
ok
和错误消息写入both.log
,并且还会将错误消息写入err.log
。错误消息由 复制
tee
,它从其标准输入流中读取它,来自复合命令的重定向错误流。该tee
实用程序将其所有输入写入给定文件和标准输出流。复合命令和 of 的标准输出tee
通过管道传输到cat
,后者将它们写入both.txt
.