我刚接触linux十天左右,英语不好。我正在学习 I/O 重定向部分。
我知道当命令成功时,屏幕不会显示错误消息,而命令失败时,屏幕上会显示错误消息。
例如当我输入cat file1
.在命令发出之前。 stdin、stdout 和 stderr 的状态如何?我发出命令后。标准流的状态如何?
当file1存在时。在我看来,最终输入是 file1,最终输出是终端。(不确定;-0-)并且我没有错误消息。那么这是否意味着我这里没有 stderr ?或者它在哪里?
当没有文件存在时。我只有一条错误消息。那么这是否意味着我没有标准输入并将标准错误重定向到标准输出?
感谢您可以向我解释这一点或给我一些线索,例如使用手册页或其他任何内容。
答案1
一般情况下stdin
, stdout
, 和stderr
始终存在:
ls -l /proc/self/fd
但并非所有命令都使用它们。您可以检查命令写入的位置:
> strace -e trace=write cat nonexistfile
write(2, "cat: ", 5cat: ) = 5
write(2, "nonexistfile", 12nonexistfile) = 12
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
) = 1
或者更简单:比较
command >/dev/null
和
command 2>/dev/null