博客
关于我
Shell脚本中的 /Dev/Null 用途
阅读量:652 次
发布时间:2019-03-15

本文共 1228 字,大约阅读时间需要 4 分钟。

/dev/null 在 Shell 脚本中的实用用途

背景介绍

在 Unix/Linux 环境中,/dev/null 是一个特殊的设备文件,其工作方式类似于一个“黑洞”——任何数据被写入该文件都会被丢弃,无法通过读取或者输出恢复。这种特性使得 /dev/null 在日常运维和脚本编写中变得非常实用。


丢弃标准输出

在编写 Shell 脚本时,有时候你希望禁止命令输出中间结果,而只关注最终的命令执行结果。这种情况下,可以将命令的标准输出重定向到 /dev/null。

例如,现有如下脚本:

#!/bin/bashcommand -v $1if [[ $? -eq 0 ]]; then  echo "command $1 exist..."else  echo "command $1 not exist..."fi

问题:在执行 ./a.sh top 时,会输出类似于 "/bin/top" 的信息,这可能会干扰后续的逻辑处理。

解决方案:将命令的标准输出重定向到 /dev/null:

#!/bin/bashcommand -v $1 &>> /dev/nullif [[ $? -eq 0 ]]; then  echo "command $1 exist..."else  echo "command $1 not exist..."fi

执行之后,输出将只显示 command top exist...command top not exist...,而不会再显示具体的路径信息。


删除文件或目录(无需判断文件存在性)

在删除文件或目录时,如果遇到文件不存在的错误信息,可以通过重定向来避免输出错误日志。例如:

#!/bin/bashrm $1 &>> /dev/null 2>>&1

这样一来,无论 $1 是已存在的文件、目录还是不存在的文件,脚本都会 silence 输出。


清空文件内容

如果需要快速清空一个文件的内容,可以利用 /dev/null 的特性。例如:

cat /dev/null > t.txt

在 t.txt 中会被写入一个空文件,可以用 cat t.txt 查看内容。


日志处理

在脚本编写过程中,为了方便调试,通常会添加日志打印语句。例如,如果你创建了一个日志文件 log.txt,用来记录调试信息,可以使用如下方式避免不必要的文件占用:

ln -s /dev/null ./log.txt

这将创建一个指向 /dev/null 的软连接,之后的写入操作会将所有内容丢弃掉,同时仍然保留文件存在效果。


other use cases

  • 处理输入:将输入流重定向到 /dev/null,模拟没有输入的环境。
  • **重定向与_redirection_关系:从多个命令的输出中筛选特定信息时,可以使用 /dev/null 丢弃不需要的内容。

通过理解和灵活运用 /dev/null 的特性,你可以简化脚本逻辑,提高工作效率。

转载地址:http://fntmz.baihongyu.com/

你可能感兴趣的文章
Linux kernel pwn --- CSAW2015 StringIPC
查看>>
编译android源代码(aosp)
查看>>
IDEA 找不到 Persistence窗口解决办法
查看>>
C++ Primer Plus读书笔记:循环读取(错误处理)
查看>>
伴随矩阵和逆矩阵的关系证明
查看>>
Form窗体属性
查看>>
解决Eclipse加载图片或网页出现404错误
查看>>
vue 错误收集
查看>>
Java选择排序算法实现
查看>>
00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
查看>>
00013.05 字符串比较
查看>>
IEDA全局搜索快捷键 Ctrl+shift+F无效的原因、 eclipse:Ctrl + h 进行全局搜索
查看>>
LeetCode: 138. 复制带随机指针的链表(中等)[DFS, 迭代]
查看>>
Effective Java 读书笔记
查看>>
SpringBoot使用@Email报错误
查看>>
Rabbitmq的内存磁盘监控
查看>>
访问servlet时弹出文件下载框解决方法
查看>>
IDEA-@Slf4j和log标签&@Data(Lombok)无效
查看>>
SpringCloud-Eureka报错 Error creating bean with name解决
查看>>
Thymeleaf 生成下标,索引,使用Stat变量
查看>>