/dev 错误中没有 null

/dev 错误中没有 null

我执行了以下行:

which lsb_release 2&>1 /dev/null

输出:

error: no null in /dev

当我使用命令验证错误时ls /dev/nullnull存在于/dev.为什么会出现这个错误?我无法破译这个问题。

更新

我刚刚which在别人的系统上尝试了上面的命令,它运行得很好,没有产生我得到的错误。

答案1

首先,重定向可以发生在命令行中的任何位置,不一定是在末尾或开头。

例如:

echo foo >spamegg bar

将保存foo bar在文件中spamegg

另外,有两个版本which,一个是内置的 shell,另一个是外部可执行文件(debianutilsDebian 中附带)。

在你的命令下:

which lsb_release 2>&1 /dev/null

通过2&>1,您将 STDERR (FD 2) 重定向到 STDOUT (FD 1) 指向的位置,而不是重定向到,/dev/null这是首先完成的。

所以剩下的命令是:

which lsb_release /dev/null

由于没有类似的命令/dev/null,因此出现错误。

请注意,此行为取决于whichshell 是内置的还是外部可执行文件,bash没有内置的并使用外部的ksh,并且只是忽略错误,不显示任何错误消息。dashwhich

另一方面,zsh使用内置which并显示:

/dev/null not found

which因此,据推测,该特定错误是由您正在使用的 shell 的内置命令显示的。


另外,您似乎只想将 STDERR 重定向到/dev/null如果ielsb_release中不存在则显示错误。如果是这样,只需将 STDERR 重定向到:PATHwhich/dev/null

which lsb_release 2> /dev/null

答案2

命令的语法which lsb_release 2&>1 /dev/null错误。

您可能打算which lsb_release 2> /dev/null假设您正在运行“sh”类型的 shell 来运行。

如果您正在运行cshshell 类型,那么您在 stderr 重定向方面会遇到更多问题。

相关内容