在Unix中,我知道0 1和2代表stdin stdout和stderr。
根据我的理解,命令cat
含义"连接"可以连接不同的文件。
例如,cat file>&1
可以连接file
和stdout,箭头表示从file
到stdout的重定向,因此我们可以看到{{1}的内容来自终端的stdout。
但是,我不明白为什么下面的命令不起作用:
file
我认为这个命令应该有效,因为它意味着连接stdin和cat 0>file
并从stdin重定向到file
。
但它没有用,我收到了一个错误:
cat:标准输入的输入错误:文件号错误
我认为file
和cat > file
完全相同,就像cat 0>file
和cat file
完全一样,但似乎我错了。 ..
令我惊讶的是,cat file>&1
和cat 1>file
是相同的。为什么呢?
答案 0 :(得分:3)
Syntax 0>file
redirects stdin
into a file (if that makes sense). Then cat
tries to read from stdin
and gets EBADF
error because stdin
is no longer an input stream.
EBADF
- fd is not a valid file descriptor or is not open for reading.
Note that redirections (< and >) are handled by the shell, cat does not see 0>file
bit.