> /dev/null 2>&1 || true 在 Linux 中是什么意思?

> /dev/null 2>&1 || true 在 Linux 中是什么意思?
"command "> /dev/null 2>&1 || true  

现在我知道我们正在将运行的命令的输出发送到一个空文件。我需要知道*2>&1 || true*

答案1

总结: >/dev/null 2>&1 || true有效地使命令静音,丢弃任何(错误或正常)输出和命令结果,但不会丢弃其任何副作用。下面解释了原因。


Linux 程序默认接收三个文件描述符,这些文件描述符在程序的主代码开始执行之前打开。它们是stdin(标准输入,文件描述符 0)、stdout(标准输出,文件描述符 1)和stderr(标准错误,文件描述符 2)。它们通常与当前终端相关联,如今实际上分别意味着键盘、屏幕和屏幕(但情况并非总是如此)。

通过在命令中指定> /dev/null(重定向通常可以在命令中的任何位置进行,但按照惯例,它位于末尾或很少位于开头),您可以指定标准输出(隐式的1,但可以使用1>而不是仅 来指定>)应重定向到 写入/dev/null,这将丢弃写入其中的所有内容。

2>&1然后将文件描述符 2 ( 2>) 重定向到文件描述符 1 当前绑定到哪个&1)。

当您想将stdout和重定向stderr到同一位置时,一种快捷方式是使用。&>但是&> /dev/null,并非所有 shell 都支持此功能。

因此,通过指定,> /dev/null 2>&1您告诉系统您希望将命令的标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出(后者又重定向到 /dev/null)。通过丢弃发送到 stdout 或 stderr 的所有输出,这具有使命令静音的效果。

请注意,有些程序使用其他方式在屏幕上绘图,例如 ncurses 之类的终端库,通常不会受此影响,或者会受到意外影响。但对于编写为以管道方式使用的程序(包括大多数向终端输出简单文本的程序),这种方法是可行的。

反过来||意味着如果程序返回除 0 之外的退出状态(其中,按照惯例 0 表示成功执行),则 shell 将调用 另一侧的命令||,在本例中为true。不要将其与普通管道混淆,普通管道使用单个命令|并将左侧标准输出与右侧标准输入绑定在一起。 的对立面||&&,只有当左侧返回退出状态 0 时才执行右侧,而互补的 is;只是将多个命令分隔开(无论第一个命令的退出状态如何,都会执行第二个命令)。

true反过来,是一个非常简单的程序,其唯一目的是以成功状态退出。它本身通常不是很有用,但在编写 shell 脚本中的条件时非常有用。它的对立面是,以失败false(非零)状态退出,但除此之外,像 true 一样,什么也不做。

|| true因此,通过在命令后附加,您知道无论哪种方式,某物在该组命令执行完毕时,将成功执行。因此,您知道当前状态代码(在 中可用$?)将始终指示执行成功。

答案2

Linux 中的“command ” > /dev/null 2>&1 || true 是什么意思?

2>&1表示“将STDERR(2)重定向到STDOUT(1)”
STDERR(标准错误)的预定义文件描述符等于 2
并且STDOUT(标准输出)的文件描述符等于 1)

>- 和 相同1>,表示重定向STDOUT到某个地方

那么整个操作将被翻译为:

command > /dev/null 2>&1- 将 STDOUT 和 STDERR 文件描述符重定向到“黑洞”或基本上忽略所有输出command
(“黑洞”或/dev/null接受输入并在内部忽略它的特殊设备)

关于|| true- 如果command返回非 0(零)退出状态(通常表示某种类型的错误/失败)则true强制将退出状态代码设置为 0(零)表示成功。

相关内容