一.文件描述符及重定向

首先在Linux中自带10种文件描述符,分别对应数字字符0~9,但常用的文件描述符就0、1、2三个,分别对应“文件标准输入”、“文件标准输出”、“文件错误输出”。简易的理解,文件的标准输出是指 “能够打印到屏幕上的内容” ,文件的错误输出是“当命令运行错误时,打印到屏幕上的内容”。

1. 重定向符

>               输出重定向到一个文件或设备 覆盖原来的文件
>!              输出重定向到一个文件或设备 强制覆盖原来的文件
>>             输出重定向到一个文件或设备 在原来的文件内容后面继续添加内容
<               输入重定向到一个程序

下面是文件描述符和重定向的配合使用

2. 文件标准输出

标准输出即为代码正常运行的时候结果,内容形式多样,一般会打印打屏幕上面

下面的两行代码的功能一样,均是将“hello”输入到 result 这个文件里面

sww$ echo hello>result
sww$ echo hello 1>reslut

可见 “1” 是指代 “echo hello” 这部分命令的正常输出,输出的内容是 hello,默认 > 的内容的左边会自带一个1

3.文件错误输出

通过下面的代码,错误输出进行理解:

$ hello >result
-bash: hello: command not found

可见,用相同的代码,是没办法将报错的信息输入到文件里的,所以要使用2来指代错误信息,将其输入到文件中,代码如下:

$ hello 2>result

二.将文件的正常输出和报错信息同时记录到文件当中

对于某些需要长时间运行的代码,我们不能时时刻刻观察记录的运行结果和情况,普遍的方法就是创建文件来记录代码的输出内容

首先看一段代码:

$ cat ltest.sh
echo hello
bash not_exist
#其中的 not_exist 是不存在的一个代码,用于来获得报错信息

直接运行脚本:

$ bash ltest.sh
hello
bash: not_exist: No such file or directory

我们可以看到运行结果有正常输出:hello,也有报错的输出:bash: not_exist: No such file or directory

下面我尝试把这些内容输入到一个文件里

$ bash ltest.sh 1,2>result
bash: not_exist: No such file or directory$ bash ltest.sh 1>result
bash: not_exist: No such file or directory$ bash ltest.sh 2>result
hello

以上三个代码都没将我们期望正确和报错输出输入到这个 result 文件里,当然第一行代码是我自己编的,按照最简单逻辑尝试一下输出控制 :-D

正确的方法

$ bash ltest.sh 1>result 2>&1
$ cat result
hello
bash: not_exist: No such file or directory

有几个值得注意的问题:

1. 其中"1>result" 的中可以省略1,和前面一样

2. “2>&1” 将错误输出追加到标准输出中。当 2 放到 > 的左边时,并非“覆盖”,而是含有追加的输出的涵义,具体的逻辑可见下面的流程图:

3. 为什么“2>&1” 是放在最后

这大概于系统的运行逻辑有关,假如不放在最后面:

$ bash ltest.sh 2>&1 >result
bash: not_exist: No such file or directory

流程变成:

Linux 简易理解重定向以及 2>1 的使用相关推荐

  1. Linux下Shell重定向

    1. 标准输入,标准输出与标准错误输出 Linux下系统打开3个文件,标准输入,标准输出,标准错误输出. 标准输入:从键盘输入数据,即从键盘读入数据. 标准输出:把数据输出到终端上. 标准错误输出:把 ...

  2. linux shell数据重定向(输入重定向与输出重定向)详细分析

    转载自: linux shell数据重定向(输入重定向与输出重定向)详细分析 - 程默 - 博客园 http://www.cnblogs.com/chengmo/archive/2010/10/20/ ...

  3. linux分屏显示命令文件夹,Linux简易命令整理

    Linux简易入门 1. Linux 概述 1.11 Linux 是什么 1.2 虚拟机 1.3 centOs 2. Linux 基本知识 2.1 Linux基本常识 2.2 Linux 终端 3. ...

  4. linux 重定向偶尔失效,Linux crontab 输出重定向不生效问题解决

    本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名,转载请务必注明出处,谢谢. 声明: 本博客欢迎转发,但请注明出处,保留原作者信息 博客地址:孟阿龙的博客 所有内容为本人学习.研究. ...

  5. linux Fd以及重定向讲解

    感谢你的阅读,是对我最大的鼓励!!!! 目录 fd理解 文件操作重定向 让我们回顾C语言文件操作 首选我们要知道2个知识点: 额外知识点 如何理解一切皆文件呢? 当父进程fork创建子进程是否创建文件 ...

  6. Linux入门-7 Linux管道、重定向以及文本处理

    Linux管道.重定向以及文本处理 1 Linux多命令协作:管道及重定向 管道和重定向 2 Linux命令行文本处理工具 文件浏览 基于关键字搜索-grep 基于列处理文本-cut 文本统计-wc ...

  7. (转载)linux下输入输出重定向和管道符

    linux下输入输出重定向和管道符 1. 输出重定向 >代表以覆盖的方式将命令的正确输出输出到指定的文件或设备当中. >>代表以追加的方式将命令的正确输出输出到指定的文件或者设备当中 ...

  8. linux系统调用理解之摘录(3)

    Linux系统调用需要持续不断地深入理解,因此这里收集一些较好的博客,以便后续自己参考研究: (1)Linux 库函数与系统调用的关系与区别 https://www.cnblogs.com/liwei ...

  9. linux分区理解整理

    linux分区理解: 1. /boot 分区, 跟启动有关的分区,放在启动易硬盘上,不要让系统找的太艰难. 2. /swap 分区, 跟windows的虚拟物理内存功能相同,一般设为内存的一倍至两倍. ...

最新文章

  1. FTP之‘基础连接已关闭:服务器提交了协议冲突’错误探析
  2. 2019年终总结一下吧
  3. nginx 上传文件漏洞_nginx爆惊天漏洞 上传图片就能入侵服务器
  4. QT的QReadWriteLock类的使用
  5. 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
  6. Android 项目在Eclipse中的目录结构
  7. 战“疫”期,阿里云云效团队在家高效开发实录
  8. 3dmax物体轴心点坐标和unity3d不一样_Unity3D新手必看:几个让你相见恨晚的小技巧...
  9. java线程交替执行_Java synchronized线程交替运行实现过程详解
  10. python中字典的value可以为任意对象_手把手教你学Python之字典
  11. docker获取数据库时间相差8小时_Docker部署服务时间相差8小时解决方法
  12. Linux版Silverlight - Moonlight宣布停止更新
  13. linux设备连接磁带机,Redhat Enterprise Linux磁带机简单操作方法
  14. 高通蓝牙耳机(QCC3034)Sink开发基础教程一:高通蓝牙方案介绍及开发环境搭建
  15. Java 6-3 锥体体积计算
  16. html svg 线条动画,HTML5 SVG图形轮廓线条绘制动画插件-vivus
  17. h3c无线认证服务器,H3C无线路由器配置样例之无认证接入
  18. python实现模拟身份验证服务器综合系统设计
  19. 我应该拿什么来拯救你,我的游戏?
  20. 九龙证券|次新股叠加智慧交通+信创+数字经济概念,开盘冲涨停!

热门文章

  1. Mybatis 注解sql 中使用like 和if 判断关键字
  2. 七牛云账号注销与解绑
  3. 当你有一个目标时,就请朝着它努力,你一定会成功的--世界杯进球记录第一射手克劳泽...
  4. php字数超出省略号,html文本控制显示字数超出用省略号的方法
  5. Android 设备接入小票打印机 爱宝小票打印机
  6. Pytorch BERT
  7. Redis:主从复制
  8. html5钻石,html5 canvas发光的钻石背景动画特效
  9. 文件服务器录音功能,录音地址
  10. 弹性布局 space-between 换行后最后两个元素不能对齐如何处理