文件描述符和重定向


参考书籍 Linux shell 脚本攻略


文件描述符用来追踪已打开的文件,是与打开的文件或数据流相关的整数。最常见的文件描述符是stdin stdout stderr。文件描述符0/1/2是系统预留的。

  • 0 --- stdin,标准输入
  • 1 --- stdout,标准输出
  • 2 --- stderr,标准错误
重定向

两个重定向符 >>>

  • > :文件中的内容会先清空,再写入内容。
  • >>:将文本追加到目标文件中。
$ echo "Hello world" > tmp.txt
$ echo "Hello world" >> tmp.txt

使用重定向操作符时,重定向的内容不会出现在终端,而是直接被导入文件。默认使用标准输出。(>等同于 1>)如果想使用特定的文件描述符,必须将描述符置于操作符前。
当一个命令发生错误并退出时,会返回一个非0的退出状态;成功运行返回数字0。退出状态可通过状态变量 $?获得。

$ ls + 2> out.txt #错误重定向
$ cmd 2>stderr.txt 1> stdout.txt #stderr重定向到一个文件,stdout重定向到另一个文件
$ cmd > output.txt 2>&1 #将stderr转换成stdout,使得stderr和stdout都重定向到同一个文件中
$ cmd &> out.txt #作用同上
$ cmd 2> /dev/null #将stderr重定向到/dev/null

注:/dev/null是一个特殊的设备文件,该文件收到任何数据都会被丢弃。也被称为位桶(bit bucket)或黑洞。
当对stderr或stdout进行重定向时,重定向的文本将传入文件,就不能将输出通过管道(|)传给接下来的命令,而这些命令是通过stdin来接收文本的。
如果既要将数据重定向到文件,又要提供一份重定向的数据副本作为后续命令的stdin,可以使用tee来实现。
$ command | tee FILE1 FILE2
$ cat a* | tee out.txt | cat -n

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.文件描述符是与文件输入、输出相关联的整数。它们用来跟踪已打开的文件。最常见的文件描述符是stdin、stdou...
    ChiangCMBA阅读 356评论 0 0
  • 【系统预留描述符】 0:stdin 标准输入 1:stdout 标准输出 2:stderr 标准错误 标准错误输出...
    啾咪啾啾酱阅读 285评论 0 0
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,462评论 0 5
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,213评论 1 19
  • 行动 牛人们每天都在行动,普通人每天在观众、听众和“梦想家”几个身份间来回切换,不知疲倦。 作为一个普通人,不行动...
    Y先生说阅读 803评论 0 1