zoukankan      html  css  js  c++  java
  • Linux shell的标准输入、输出和错误

    编译文件时,若编译过程时间长,可以将  标准错误  重定向  输出到一个文件中   2 > 1.txt         也可以通过管道  重定向 到 标准输出    2 > &1

    Linux shell的标准输入、输出和错误

    标签: linux shellshell重定向
     分类:
     

    1.文件描述符

    在linux shell执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名:

    文件 文件描述符
    输入文件—标准输入 0(缺省是键盘,为0时是文件或者其他命令的输出)
    输出文件—标准输出 1(缺省是屏幕,为1时是文件)
    错误输出文件—标准错误 2(缺省是屏幕,为2时是文件)
    系统中实际上有12个文件描述符,我们可以任意使用文件描述符3到9.

    2.文件重定向:改变程序运行的输入来源和输出地点

    2.1.输出重定向:

    Command > filename 把标准输出重定向到一个新文件中
    Command >> filename 把标准输出重定向到一个文件中(追加)
    Command > filename 把标准输出重定向到一个文件中
    Command > filename 2>&1 把标准输出和错误一起重定向到一个文件中
    Command 2 > filename 把标准错误重定向到一个文件中
    Command 2 >> filename 把标准输出重定向到一个文件中(追加)
    Command >> filename2>&1 把标准输出和错误一起重定向到一个文件(追加)

    2.2.输入重定向:

    Command < filename > filename2 Command命令以filename文件作为标准输入,以filename2文件作为标准输出
    Command < filename Command命令以filename文件作为标准输入
    Command << delimiter  从标准输入中读入,知道遇到delimiter分界符

    2.3.绑定重定向
    Command >&m 把标准输出重定向到文件描述符m中
    Command < &- 关闭标准输入
    Command 0>&- 同上


    3.shell重定向的一些高级用法

    3.1.重定向标准错误

    例子1:
    command 2> /dev/null
    如果command执行出错,将错误的信息重定向到空设备
    例子2:
    command > out.put 2>&1
    将command执行的标准输出和标准错误重定向到out.put(也就是说不管command执行正确还是错误,输出都打印到out.put)。

    3.2.exec用法
    exec命令可以用来替代当前shell;换句话说,并没有启动子shell,使用这一条命令时任何现有环境变量将会被清除,并重新启动一个shell(重新输入用户名和密码进入)。
    exec command
    其中,command通常是一个shell脚本。
    对文件描述符操作的时候用(也只有再这时候),它不会覆盖你当前的shell


    例子1:
    #!/bin/bash
    #file_desc


    exec 3<&0 0<name.txt
    read line1
    read line2
    exec 0<&3
    echo $line1
    echo $line2


    其中:
    首先,exec 3<&0 0<name.txt的意思是把标准输入重定向到文件描述符3(0表示标准输入),然后把文件name.txt内容重定向到文件描述符0,实际上就是把文件name.txt中的内容重定向到文件描述符3。然后通过exec打开文件描述符3;

    然后,通过read命令读取name.txt的第一行内容line1,第二行内容line2,通过Exec 0<&3关闭文件描述符3;

    最后,用echo命令输出line1和line2。最好在终端运行一下这个脚本,亲自尝试一下。


    例子2:
    exec 3<>test.sh;
    #打开test.sh可读写操作,与文件描述符3绑定
     
    while read line<&3
     do
        echo $line;
    done
    #循环读取文件描述符3(读取的是test.sh内容)
    exec 3>&-
    exec 3<&-
    #关闭文件的,输入,输出绑定

    参考:

    http://http://blog.csdn.net/cjfeii/article/details/10084343

    http://zqwt.012.blog.163.com/blog/static/1204468420103272857116/

    http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html

    http://blog.csdn.net/flowingflying/article/details/5201199

  • 相关阅读:
    基本数据类型(int, bool, str)
    循环 运算符 格式化输出 编码
    认识python 变量 数据类型 条件if语句
    简述bug的生命周期?
    性能测试的流程?
    主键、外键的作用,索引的优点与不足?
    需求测试的注意事项有哪些?
    对某软件进行测试,发现在WIN98上运行得很慢,怎么判别是该软件存在问题还是其软硬件运行环境存在问题?
    什么是兼容性测试?请举例说明如何利用兼容性测试列表进行测试。
    如何定位测试用例的作用?
  • 原文地址:https://www.cnblogs.com/the-tops/p/5650506.html
Copyright © 2011-2022 走看看