​/dev/null​ 是一个特殊的设备文件它丢弃一切写入其中的数据 可以将它 视为一个黑洞, 它等效于只写文件, 写入其中的所有内容都会消失, 尝试从中读取或输出不会有任何结果同样/dev/null​ 在命令行和脚本中都非常有用用途​/dev/null​ 通常被用于丢弃不需要的输出流或作为用于输入流的空文件这些操作通常由重定向完成任何你想丢弃的数据都可以写入其中丢弃标准输出在写shell脚本的时候只想通过命令的结果执行后面的逻辑而不想命令执行过程中有一大堆中间结果输出这时候可以把命令执行过程中的输入全部写入 /dev/null​现有 a.sh​ 脚本它的功能是判断传入的系统命令是否存在脚本内容如下#!/bin/bash command -v $1 if [[ $? -eq 0 ]]; then echo command $1 exist... else echo command $1 not exist... fi执行 ./a.sh top​ 命令输出如下[ttecs-centos-7 dev_test]$ ./a.sh top /bin/top command top exist...说明: command -v 命令名​ 是查找指定命令名的命令是否存在如果存在输出指定命令名的路径否则不做任何输出​$?​ 表示前一条命令的执行结果, 0 表示成功其他表示失败脚本的执行结果中先输出了 top​ 命令的路径紧接着输出了top​命令存在的日志把 command -v $1​的结果重定向到 /dev/null​ 可以屏蔽掉 top​命令路径的输出调整之后的a.sh​ 内容如下#!/bin/bash command -v $1 /dev/null if [[ $? -eq 0 ]]; then echo command $1 exist... else echo command $1 not exist... fi再次执行 ./a.sh top​结果如下[ttecs-centos-7 dev_test]$ ./a.sh top command top exist... [ttecs-centos-7 dev_test]$从执行结果可以看出把 command -v $1 ​ 的中间结果重定向到 /dev/null​ 之后就不会再输出top​命令的路径了而且修改之后的脚本执行结果和原来的结果是一样的更简练的写法#!/bin/bash if command -v $1 /dev/null; then echo command $1 exist... else echo command $1 not exist... fi丢弃标准错误输出在shell脚本中删除一个文件的时候需要先判断文件是否存在然后才能执行删除操作否则删除的时候会输出错误, 一般的删除文件脚本内容如下#!/bin/bash if [ -f $1 ]; then rm $1 fi可以通过把删除命令的输出重定向到 /dev/null​ 来避免输出错误信息, 同时也不用判断文件是否存在了, 调整之后的删除脚本内容如下#!/bin/bash rm $1 /dev/null 2$1分别执行命令 ./d.sh t1.txt​、./d.sh t2.txt​ 结果如下[ttecs-centos-7 dev_test]$ ls t*.txt t1.txt [ttecs-centos-7 dev_test]$ ./d.sh t1.txt [ttecs-centos-7 dev_test]$ ./d.sh t2.txt [ttecs-centos-7 dev_test]$ ls t*.txt ls: 无法访问t*.txt: 没有那个文件或目录​t1.txt​ 文件位于当前目录下t2.txt​ 不存在从执行结果可以看出不管是删除存在的文件还是不存在的文件都不会有错误输出信息了清空文件内容清空文件内容有很多种方法这里介绍一种利用 /dev/null​ 清空文件内容的方法具体的示例如下[ttecs-centos-7 dev_test]$ cat t.txt 123456 [ttecs-centos-7 dev_test]$ cat /dev/null t.txt [ttecs-centos-7 dev_test]$ cat t.txt日志的处理在脚本中为了方便调试经常会加一些日志打印的逻辑有时这种调试日志还比较多脚本测试通过之后这些调试日志可能就删除或者注释掉了这里提供一个小技巧既不用删除也不用注释掉日志同时执行脚本的时候还不会输出这些调试日志比如: 当前目录有一个日志文件 log.txt​脚本的调试日志会以 echo this is debug log log.txt ​ 的形式写入这个文件中现在脚本功能测试通过了调试日志不需要写入log.txt​了可以这么做原来的脚本原样不动本地先删除 log.txt​然后执行 ln -s /dev/null ./log.txt​ 命令该命令建立了一个 log.txt​ 到 /dev/nulll​的软连接以后都有写入 log.txt​ 的内容实际都会写入 /dev/null​ 而写入 /dev/null​ 的所有内容都会被丢弃掉如果后面需要再次调试脚本删除链接即可