默认情况下始终有3个"文件"处于打开状态, stdin (键盘), stdout (屏幕), and stderr (错误消息输出到屏幕上). 这3个文件和其他打开的文件都可以被重定向. 对于重定向简单的解释就是捕捉一个文件, 命令, 程序, 脚本, 或者甚至是脚本中的代码块(参见 Example 3-1 和 Example 3-2)的输出, 然后将这些输出作为输入发送到另一个文件, 命令, 程序, 或脚本中.

每个打开的文件都会被分配一个文件描述符. stdin, stdout, 和stderr的文件描述符分别是0, 1, 和 2. 对于正在打开的额外文件, 保留了描述符3到9. 在某些时候将这些格外的文件描述符分配给stdin, stdout, 或者是stderr作为临时的副本链接是非常有用的. 在经过复杂的重定向和刷新之后需要把它们恢复成正常的样子

关闭文件描述符
n<&-关闭输入文件描述符n.
0<&-, <&-关闭stdin.
n>&-关闭输出文件描述符n.
1>&-, >&-关闭stdout.
子进程继承了打开的文件描述符. 这就是为什么管道可以工作. 如果想阻止fd被继承, 那么可以关掉它.

COMMAND_OUTPUT ># 重定向stdout到一个文件.# 如果没有这个文件就创建, 否则就覆盖.ls -lR > dir-tree.list# 创建一个包含目录树列表的文件.: > filename# > 会把文件"filename"截断为0长度.# 如果文件不存在, 那么就创建一个0长度的文件(与'touch'的效果相同).# : 是一个占位符, 不产生任何输出.> filename    # > 会把文件"filename"截断为0长度.# 如果文件不存在, 那么就创建一个0长度的文件(与'touch'的效果相同).# (与上边的": >"效果相同, 但是在某些shell下可能不能工作.)COMMAND_OUTPUT >># 重定向stdout到一个文件.# 如果文件不存在, 那么就创建它, 如果存在, 那么就追加到文件后边.# 单行重定向命令(只会影响它们所在的行):1>filename# 重定向stdout到文件"filename".
1>>filename# 重定向并追加stdout到文件"filename".
2>filename# 重定向stderr到文件"filename".
2>>filename# 重定向并追加stderr到文件"filename".
&>filename# 将stdout和stderr都重定向到文件"filename".# 重定向stdout, 一次一行.LOGFILE=script.logecho "This statement is sent to the log file, \"$LOGFILE\"." 1>$LOGFILEecho "This statement is appended to \"$LOGFILE\"." 1>>$LOGFILEecho "This statement is also appended to \"$LOGFILE\"." 1>>$LOGFILEecho "This statement is echoed to stdout, and will not appear in \"$LOGFILE\"."# 每行过后, 这些重定向命令会自动"reset".# 重定向stderr, 一次一行.ERRORFILE=script.errorsbad_command1 2>$ERRORFILE       #  错误消息发到$ERRORFILE中.bad_command2 2>>$ERRORFILE      #  错误消息添加到$ERRORFILE中.bad_command3                    #  错误消息echo到stderr,#+ 并且不出现在$ERRORFILE中.# 每行过后, 这些重定向命令也会自动"reset".#==============================================================================2>&1# 重定向stderr到stdout.# 得到的错误消息与stdout一样, 发送到一个地方.i>&j# 重定向文件描述符i 到 j.# 指向i文件的所有输出都发送到j中去.>&j# 默认的, 重定向文件描述符1(stdout)到 j.# 所有传递到stdout的输出都送到j中去.0< FILENAME< FILENAME# 从文件中接受输入.# 与">"是成对命令, 并且通常都是结合使用.## grep search-word <filename[j]<>filename# 为了读写"filename", 把文件"filename"打开, 并且分配文件描述符"j"给它.# 如果文件"filename"不存在, 那么就创建它.# 如果文件描述符"j"没指定, 那默认是fd 0, stdin.## 这种应用通常是为了写到一个文件中指定的地方.echo 1234567890 > File    # 写字符串到"File".exec 3<> File             # 打开"File"并且给它分配fd 3.read -n 4 <&3             # 只读4个字符.echo -n . >&3             # 写一个小数点.exec 3>&-                 # 关闭fd 3.cat File                  # ==> 1234.67890# 随机存储.|# 管道.# 通用目的的处理和命令链工具.# 与">"很相似, 但是实际上更通用.# 对于想将命令, 脚本, 文件和程序串连起来的时候很有用.cat *.txt | sort | uniq > result-file# 对所有的.txt文件的输出进行排序, 并且删除重复行,# 最后将结果保存到"result-file"中.

转载于:https://www.cnblogs.com/new0801/p/6176855.html

Linux Shell编程(25)——I/O 重定向相关推荐

  1. linux简单重定向代码,Linux Shell编程(26)——代码块重定向

    像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 .所有的这些依靠代码块结尾的 < ...

  2. Linux Shell 编程学习总结

    Shell 教程 Shell简介:什么是Shell,Shell命令的两种执行方式 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成 ...

  3. 《Linux Shell编程从初学到精通(第2版)》pdf

    下载地址:网盘下载 内容简介 编辑 shell是用户与内核进行交互操作的一种接口,是linux最重要的软件之一.目前最流行的shell称为bash shell,bash shell脚本编程以其简洁.高 ...

  4. Linux shell编程学习

    Linux shell编程学习 shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令.这点与Windows的命令提示符类似,但Linux shell的功能更加强 ...

  5. Linux Shell编程学习笔记(4)

    Linux Shell编程学习笔记(2015-7-20) 分类:linux shell   今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...

  6. linux实验三shell程序设计,实验三 LINUX SHELL编程

    精选文库 -实验三LINUX SHELL 编程 四.实验内容 本实验包含两个具体的SHELL程序编写任务,较为全面地涉及了SHELL 程序的设计方法和技术.内容如下: 1.创建以下菜单程序: USER ...

  7. linux —— shell 编程(文本处理)

    导读 本文为博文 linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed a ...

  8. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程

    Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...

  9. Linux Shell编程语句case

    Linux Shell编程case语句 case语句 case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下:case $变量名 in模式1)命令序列1;;模式2)命令序列2;; ...

  10. linux shell 处理日语,linux —— shell 编程(文本处理)

    导读 本文为博文linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 1.基本文本处理 sort:用于排序,常 ...

最新文章

  1. phpadmin试用
  2. vi 整行 多行 复制与粘贴
  3. Haproxy配置文件详解
  4. vue路由跳转权限_如何在vue中实现路由跳转判断用户权限功能?
  5. 牛客多校8 - Interesting Computer Game(并查集)
  6. python实现弹幕_python实现b站直播自动发送弹幕功能
  7. python假设有三个列表_python基础三(列表和元组)
  8. NOIP2018 游记
  9. 小学数学思维导图集合 小学数学思维导图怎么画
  10. Android 系统(44)---多语言
  11. 个人晋升演讲ppt_如何写好公司级别晋升 PPT?
  12. Error排错:container runtime network not ready
  13. Linux WiFi使用
  14. 成绩不好的穷孩子,该做出选择了
  15. 十种能毁掉你一生职场生涯的心态
  16. 韩松手机摄影笔记第八课--手机人物摄影
  17. 记一次windows 10 无法升级问题的处理(系统盘MBR转GPT)
  18. [dp][前缀和][并查集] 洛谷 P3575 DOO-Around the world
  19. antlr (updating)
  20. 【java】java多线程及线程池详解

热门文章

  1. 0x7c97cd12 指令引用的 0x00000014内存。该内存不能为written
  2. C++11 std::ref()
  3. 归并排序(链表结构)
  4. mysql 添加实例_如何在多实例基础上再添加一个mysql的实例
  5. 计算机应用基础doc,计算机应用基础.doc
  6. sql怎么把小数变百分比_Excel怎么自动算出百分比?
  7. Java编程:哈希表
  8. Java编程:排序算法——希尔排序
  9. Node.js:package.json中的dependencies和devDependencies区别
  10. SQL:postgresql中在查询结果中将字符串转换为整形或浮点型