发出命令时标准 I/O 流的状态是什么?

发出命令时标准 I/O 流的状态是什么?

我刚接触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

相关内容