在下面的bash脚本中,我不明白2的含义:
function kill_process()
{
kill -9 $(lsof -i:$1 -t) 2> /dev/null
}
Run Code Online (Sandbox Code Playgroud)
我可以看到它会将输出重定向到null设备,但是2表示什么呢?
前面的数字>
告诉 shell 将哪个文件描述符重定向到该文件。如果您保留该数字,则它默认为 1 - 这与标准输出(简称stdout)相同,大多数命令将其输出写入其中。然而,终端中的程序实际上默认有两个输出通道,另一个是标准错误。stderr的目的是允许将错误发送到终端,即使标准输出重定向到文件或管道;默认情况下,它们都会进入终端。但是如果您愿意,您可以重定向 stderr,这就是这段代码正在做的事情,因为 stderr 的文件描述符编号是 2。
N>
Bash中的语法意味着将文件描述符重定向到其他地方。2
是的文件描述符stderr
,本示例将其重定向到/dev/null
。
简单来说,这意味着什么:忽略命令的错误输出。例如,如果kill
由于某个进程不存在而无法停止该进程,或者由于当前用户没有权限停止该进程,则它将在上打印消息stderr
。通过重定向stderr
到/dev/null
,您可以有效地禁止显示这些消息。