• 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

  • 相关阅读:
    自定义View的ToolBar布局报错Error:(2) No resource identifier found for attribute 'context' in package 'c
    在学git之主分支 branch
    获取发布版SHA1
    关于开启线程与UI的操作
    播放音频和视频(VideoView控件)
    通知栏Notification的应用
    Android 真机调式 Installation failed with message 远程主机强迫关闭了一个现有的连接。. It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing. WA
    运行程序申请危险权限
    mysql乐观锁总结和实践
    Nginx配置文件nginx.conf中文详解
  • 原文地址:https://www.cnblogs.com/the-tops/p/5650506.html
Copyright © 2020-2023  润新知