我希望
echo foo | tee /proc/self/fd/{3..6} 3>&1
由于诸如[[/ proc / self / fd / 4:无此类文件或目录]之类的错误而失败,但是令我惊讶的是,它输出foo
foo
foo
foo
foo
就像3>&1
导致以下所有描述符都重定向到stdout。但是,如果我将3
更改为其他名称,例如[>]
echo foo | tee /proc/self/fd/{3..6} 4>&1
或
echo foo | tee /proc/self/fd/{4..6} 4>&1
我在man proc和man dup等中寻找解释;用谷歌搜索我能想到的所有单词组合,但是找不到任何东西。这在某处有记录吗?
我希望echo foo | tee /proc/self/fd/{3..6} 3>&1因/ proc / self / fd / 4之类的错误而失败:没有这样的文件或目录等,但令我惊讶的是,它输出foo foo foo foo foo foo就像3&...
strace
显示此系统调用序列:openat(AT_FDCWD, "/proc/self/fd/3", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4
openat(AT_FDCWD, "/proc/self/fd/4", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 5
openat(AT_FDCWD, "/proc/self/fd/5", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 6
openat(AT_FDCWD, "/proc/self/fd/6", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 7