我一直在浏览脚本,到处都看到2>&1
& /dev/null
。它们是什么?谷歌搜索后,OS X 和 Linux 有什么不同吗?
答案1
Unix 进程可能使用三种“标准文件流”—— stdin
、stdout
和stderr
-stdin
通常从键盘读取输入,并且stdout
和stderr
通常转到终端窗口。stderr
获取文件描述符编号2
,并且 stdout 获取文件描述符编号1
。2>&1
表示“将所有输出重定向到 stderr 到 stdout 所在的同一位置”。/dev/null
是一个字符设备 - 它只是丢弃写入它的所有内容。
如果你不想将脚本的输出存储在任何地方,也不想在终端上看到它,你可以重定向到与 withstderr
相同的位置,然后重定向到withstdout
2>&1
stdout
/dev/null
> /dev/null
如果您仅使用 进行重定向stdout
,> /dev/null
您仍然会在终端上看到错误。
答案2
2>&1
是执行脚本的 shell 的信息,用于将所有输出(包括错误)重定向到指定目标,如文件或/dev/null
Linux 系统中的位置/dev
为系统提供了对设备的访问。其中一个设备是名为 null 的伪设备。/dev/null 是一个空设备 - 也可以称之为真空。它除了充当一个洞外什么也不做,你把东西放进去后它就消失了。如果你复制/dev/null
到某个文件,例如:
cp /dev/null /tmp/foo
指定的文件将为空。
您可以找到有关重定向输出的详细信息这里。
和这里是 /dev/null 的完整定义:
在 UNIX 上,这是一个可以写入的虚拟文件。写入此文件的数据将被丢弃。它类似于 Windows 计算机上的文件调用 NUL。关键点:在 root 计算机时,入侵者通常会将日志重定向到 /dev/null。例如,命令 ln -s /dev/null .bash_history 将导致系统停止记录 bash 命令。文化:在白话中,与黑洞的意思大致相同。典型用法:如果您不喜欢我所说的内容,请将您的评论直接发送到 /dev/null。