1.5 数据流重导向(redirect)

1.5 数据流重导向(redirect)

1.5.1 LINUX中的数据流问题

当我们执行一个指令时,此指令可能由文件读取资料,经处理之后,输出到屏幕上,此外,若指令执行失败,则会传回错误指示。
在这个过程中,

  1. 输出操作被称为:Standend output,简称STDOUT。输出代码为1,使用符号>或>>表示。

  2. 输出错误操作被称为:Standend error output,简称STDERR。输出代码为2,使用符号2>或2>>表示。
    其中,对于输出方式而言,我们可以将输出的信息直接指向文件,进行保存,这样也可以节省屏幕空间。使用规则如下:

    • 1>:将“正确的数据”覆盖输出至指定文件或装置。

    • 1>>:将“正确的数据”累加输出至指定文件或装置。

    • 2>:将“错误的数据”覆盖输出至指定文件或装置。

    • 2>>:将“错误的数据”累加输出至指定文件或装置。

      [haoqiqi@localhost ~]$ find /home -name .bashrc
      /home/haoqiqi/.bashrc
      find: ‘/home/haoqiqi/.cache/gnome-control-center’: 权限不够
      #其中,输出的第一行为STDOUT,第二行为STDERR。
      
      [haoqiqi@localhost ~]$ find /home -name .bashrc 1>list
      find: ‘/home/haoqiqi/.cache/gnome-control-center’: 权限不够
      [haoqiqi@localhost ~]$ find /home -name .bashrc 2>list
      /home/haoqiqi/.bashrc
      
      

      可以看出,当使用1>时,正确信息被输出值list中,保留了错误信息,使用2>则完全相反。

    • 垃圾桶黑洞装置:/dev/null。对于我们不想要的信息,可以在后面加/dev/null,直接丢弃信息。

      [haoqiqi@localhost ~]$ find /home -name .bashrc 2>/dev/null 		
      /home/haoqiqi/.bashrc 
      
    1. 将所有输出信息保存至一个文件下

      [haoqiqi@localhost ~]$ find /home -name .bashrc >list 2>&1 		
      	   	  		[haoqiqi@localhost ~]$  		
      

      此时将没有任何输出信息,因为他们都被输出至list文件中了。

  3. 读取操作被称为:Standard input,简称STDIN。输出代码为0,使用符号<或<<表示。
    对于读取操作,简单的理解就是:将原本由键盘输入的数据,改为由文件内容来取代。
    下面首先使用cat指令创建文件,并利用键盘输入内容。

    [haoqiqi@localhost ~]$ cat >new_cat_file
    These are wrinting by my keyboard!
    #按下ctrl+D退出输入
    

    然后执行以下语句,得到文件中的内容:

    [haoqiqi@localhost ~]$ cat new_cat_file
    These are wrinting by my keyboard!
    

    cat指令后面加上了">",因此new_cat_file文件会被主动创建,其内容是刚才打上去的。
    现在,使用stdin取代键盘的输入向文件中写入内容。

    [haoqiqi@localhost ~]$ cat >new_cat_file <~/.bashrc
    [haoqiqi@localhost ~]$ ll new_cat_file ~/.bashrc
    -rw-r--r--. 1 haoqiqi haoqiqi 231 8月   8 20:06 /home/haoqiqi/.bashrc
    -rw-rw-r--. 1 haoqiqi haoqiqi 231 10月 10 19:41 new_cat_file
    [haoqiqi@localhost ~]$ cat new_cat_file
    # .bashrc
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
    	. /etc/bashrc
    fi
    
    # Uncomment the following line if you don't like systemctl's auto-paging feature:
    # export SYSTEMD_PAGER=
    
    # User specific aliases and functions
    
    #本例中,由于使用的是“>”,因此之前写入的字符被覆盖掉了。
    

1.5.2 命令执行的判断依据(“;”,“$$” , “ ||”)

  1. 分号";":不考虑指令相关性的连续指令下达
    假如我们需要一次执行多个指令,则可以在每条指令后加分号(类比MATLAB)。
  2. 指令回传值"$?"与 “&&”、“||”
    之前讲过指令回传值的概念。对于指令回传值,若前一个指令执行的结果为正确,则回传$?=0。它与“&&”、“||”的关系如下表所示:
指令下达情况说明
cmd1&&cmd21.若cmd1执行完毕且正确($?=0),则开始执行cmd2
2.若cmd1执行完毕且错误($?≠0),则不执行cmd2
cmd1||cmd21.若cmd1执行完毕且正确($?=0),则不执行cmd2
2.若cmd1执行完毕且错误($?≠0),则开始执行cmd2
简单来说,&&表示的为和的关系,||表示的是或的关系。

本节内容就这些了, 欢迎关注我的微信公众号与我联系。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值