欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell之dev/null及重定向

程序员文章站 2024-02-19 15:27:34
...

1. /dev/null

在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF
在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。

/dev/null看作"黑洞"。它等价于一个只写文件,并且所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到。然而, /dev/null对命令行和脚本都非常的有用。

  1. cat $filename 会输出filename对应的文件内容(输出到标准输出)
  2. cat $filename >/dev/null 则不会得到任何信息,因为我们将本来该通过标准输出显示的文件信息重定向到了 /dev/null 中
    cat $filename 1>/dev/null 也会得到上述同样的效果,因为默认重定向的 1 就是标准输出
  3. 如果我们不想看到错误输出呢?我们可以禁止标准错误: cat $badname 2>/dev/null

文件描述符

文件描述符我们常见的就是系统预留的0,1和2这三个,他们的意义分别有如下对应关系:

  • 0 —— stdin(标准输入)
  • 1 —— stdout (标准输出)
  • 2 —— stderr (标准错误)

使用>>> 时,默认为标准输出 1 重定向, 所以 > file 就是 1> file 的省写,1> 之间不能有空格。数字 0, 1, 2 与它后面的操作符 > 或 < 等 总是一个整体。

示例:

  • 将stderr单独定向到一个文件,将stdout重定向到另一个文件
cmd 2>stderr.txt 1>stdout.txt
  • 将stderr转换成stdout,使得stderr和stdout都被重新定向到同一个文件中
cmd> output.txt 2>&1
# 或者采用这个方法(这个经常用到,我个人比较喜欢用这个,少写几个字符(*^__^*) )
cmd &> output.txt
cmd >& output.txt  # 两个表达式效果一样哒~

其他:
标准输出和错误输出都打:

cat $filename &>/dev/null
# 或
cat $filename 2>/dev/null >/dev/null
# 我们使用 echo $? 查看上条命令的退出码:0为命令正常执行,1-255为有出错
echo $?
相关标签: dev/null