zoukankan      html  css  js  c++  java
  • 109.linux标椎输入和标准输出

    1.linux标椎输入和标准输出

    1.简介
        标准输入0    从键盘获得输入 /proc/self/fd/0 
        标准输出1    输出到屏幕(即控制台) /proc/self/fd/1 
        错误输出2    输出到屏幕(即控制台) /proc/self/fd/2 
        [root@localhost ~]# ll /proc/self/fd/
        lrwx------ 1 root root 64 Nov  6 09:09 0 -> /dev/pts/2
        lrwx------ 1 root root 64 Nov  6 09:09 1 -> /dev/pts/2
        lrwx------ 1 root root 64 Nov  6 09:09 2 -> /dev/pts/2
        lr-x------ 1 root root 64 Nov  6 09:09 3 -> /proc/27136/fd
    
    2.linux中的空文件黑洞
        /dev/null表示黑洞,所有往这个文件里面写入的内容都会丢失,俗称“黑洞” 
        [root@localhost test]# ll /dev/null
        crw-rw-rw- 1 root root 1, 3 Nov  2 15:44 /dev/null
    
    3.案例
        1)[root@localhost test]# echo "i am a boy" > /dev/null
        # 将输出输入到/dev/null中发现没了
    
        2)2>/dev/null
        # 意思就是把错误输出到"黑洞"
    
        3)>/dev/null 2>&1
        # 默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞” 
    
        4)解析:先将错误输出重定向到标椎输出,再将标椎输出写入a.txt(这个时候标椎输出已经经过重定向,内容给了错误输出,所以文件为空)
        [root@localhost test]# echo "i am a boy" >a.txt 2>&1
        [root@localhost test]# cat a.txt 
        i am a boy
    
        5)解析: 先将标椎输出重定向到错误输出,再将标椎输出写入a.txt(这个时候标椎输出已经经过重定向,内容给了错误输出,所以文件为空)
        [root@localhost test]# echo "i am a boy" >a.txt 1>&2
        i am a boy
        [root@localhost test]# cat a.txt 
    
        6)解析:先将标椎输出先写到a.txt文件中,再将标椎输出重定向到错误输出
        [root@localhost test]# echo "i am a boy" 1>&2  >a.txt
        [root@localhost test]# cat a.txt 
        i am a boy
    
        7)解析:先将标椎输出先写到a.txt文件中,再将错误输出重定向到标椎输出
        [root@localhost test]# echo "i am a boy" 2>&1  >a.txt
        [root@localhost test]# cat a.txt 
        i am a boy
    
    4.升级版脚本测试
        [root@localhost test]# cat test.sh 
        cp -s xxx xxx   # 专门写的错误命令
        echo "i am a boy"
    
        1)解析:先将错误输出重定向到标椎输出,再将标椎输出写到a.txt文件中
        [root@localhost test]# sh ./test.sh >a.txt 2>&1
        [root@localhost test]# cat a.txt 
        cp: cannot stat ‘xxx’: No such file or directory
        i am a boy
    
        2)先将标椎输出重定向到错误输出,再将标椎输出先写到a.txt文件中(由于标椎输出已经重定向到错误输出,这个时候标椎输出没内容,文件a.txt为空)
        [root@localhost test]# sh ./test.sh >a.txt 1>&2
        cp: cannot stat ‘xxx’: No such file or directory
        i am a boy
        [root@localhost test]# cat a.txt
    
        3)解析:先将标椎输出先写到a.txt文件中,再将标椎输出重定向到错误输出
        [root@localhost test]# sh ./test.sh 1>&2  >a.txt
        cp: cannot stat ‘xxx’: No such file or directory
        [root@localhost test]# cat a.txt 
        i am a boy
    
        4)先将标椎输出先写到a.txt文件中,再将错误输出重定向到标椎输出
        [root@localhost test]# sh ./test.sh 2>&1  >a.txt
        cp: cannot stat ‘xxx’: No such file or directory
        [root@localhost test]# cat a.txt 
        i am a boy
    
        这个时候大家有没有发现一个规律,每次都是最后面的先执行,之后才是倒数第二个.
    
        5.接下来看看下面的和你预想的一样么?
        1)
        [root@localhost test]# sh ./test.sh >/dev/null 2>&1   # 输出全部进入/dev/null
        [root@localhost test]# sh ./test.sh >/dev/null 1>&2   # 输出全部进入打印到屏幕
        cp: cannot stat ‘xxx’: No such file or directory
        i am a boy
    
        2)
        [root@localhost test]# sh ./test.sh 2>&1 >/dev/null  # 标椎输入进入黑洞,错误输出打印
        cp: cannot stat ‘xxx’: No such file or directory
        [root@localhost test]# sh ./test.sh 1>&2 >/dev/null # 标椎输入进入黑洞,错误输出打印
        cp: cannot stat ‘xxx’: No such file or directory
    
    6.试一试这个
        1)先写入标椎输出,在写出错误输出
        [root@localhost test]# sh ./test.sh 1>a.txt 2>a.txt 
        [root@localhost test]# cat a.txt 
        i am a boy
        stat ‘xxx’: No such file or directory
    
        2)先写入错误输出,在写出标椎输出(2>&1像不像将错误输出插入到了标椎输出前面)
        [root@localhost test]# sh ./test.sh >a.txt 2>&1
        [root@localhost test]# cat a.txt 
        cp: cannot stat ‘xxx’: No such file or directory
        i am a boy
    
        这个时候有意思的是不是来了,我们在打印输出的时候还可以调整先后顺序.
    7.测试
        [root@localhost test]# cat test.sh   # 脚本内容如下
        mp xxx xxx
        echo "我是中国人"
        mp xxx xxx
        echo "i an a boy"
        mp xxx xxx
        mp xxx xxx
    
        1)我们真的可以调整错误输出和标椎输出的先后顺序
        [root@localhost test]# sh ./test.sh 1>a.txt 2>a.txt 
        [root@localhost test]# cat a.txt 
        我是中国人
        i an a boy
        and not found
        ./test.sh: line 3: mp: command not found
        ./test.sh: line 5: mp: command not found
        ./test.sh: line 6: mp: command not found
    
        2)2>&1这种方式不能调整错误输出和标椎输出的先后顺序
        [root@localhost test]# sh ./test.sh >a.txt 2>&1
        [root@localhost test]# cat a.txt 
        ./test.sh: line 1: mp: command not found
        我是中国人
        ./test.sh: line 3: mp: command not found
        i an a boy
        ./test.sh: line 5: mp: command not found
        ./test.sh: line 6: mp: command not found
    
  • 相关阅读:
    PowerDesigner与Eclipse同步开发
    postdrop: create file maildrop/xxx: Permission denied
    mysql导出数据mysqldump用法
    mysql 存储过程中 limit之后使用分页变量,传入分页参数. 类似于微博游标分批次获取信息;问号参数类似于c#的string.format;问号占位符
    mysql 获取本周一的日期,本周日的日期
    mysql 游标 ,嵌套游标
    asp.net调用mysql 存储过程 带 out 返回值,返回刚插入数据库中的自增的ID,LAST_INSERT_ID() 的使用
    跨服务器,跨数据库,多表联合查询 / 如何用sql语句来查询表中哪些记录是重复的
    asp.net 使用mysql数据库,OUT parameter返回值为null的bug
    mysql 类型转换 cast 将 float 转换为 decimal
  • 原文地址:https://www.cnblogs.com/liuzhanghao/p/13935385.html
Copyright © 2011-2022 走看看