zoukankan      html  css  js  c++  java
  • 65、shell,输入输出重定向

    1、重定向相关文件描述符

    1)文件描述符

    0 标准输入,/dev/stdin -> /proc/self/fd/0

    1 标准输出,/dev/stdout -> /proc/self/fd/1

    2 标准错误输出,/dev/stderr -> /proc/self/fd/2

    2)重定向

    > 是1>的简写

    < 是0<的简写

    > 将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口中。

    >> 将命令输出添加到文件末尾而不删除文件中的信息。

    >& 将一个句柄的输出写入到另一个句柄的输入中。

        2>&1声明文件描述符2为文件描述符1的副本(严格的说是通过复制文件描述符 1 来建立文件描述符 2 ,但效果通常是合并了两个流)

    3)其它

    >>file 将 STDOUT字符串追加到文件内容之后

    >file将 STDOUT重定向到新文件,当设定 $noclobber 时,可重写文件

    >&file将STDOUTSTDERR(/dev/stdout)重定向到文件(command >& file

    >>&将 STDOUTSTDERR(/dev/stderr) 字符串追加到文件内容之后(command >>& file

    [n]>&-关闭 STDOUT或文件描述符ncommand >&-

    2、注意

    1)shell遇到”>”操作符,会判断右边文件是否存在,如存在就先删除,且创建新文件;不存在直接创建。无论左边命令执行是否成功,右边文件都会变为空。

    2)“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出或错误输出绑定。

    3)当命令执行完,绑定文件的描述符也自动失效,0,1,2又会空闲。

    4)命令在执行前,先会检查输出是否正确,如输出设备错误,将不会执行命令。

    5)IO重定向中,stdoutstderr的管道会先准备好,才从stdin 读数据

    6)tee 在不影响原I/O 的情况下,将stdout 复制一份到档案去

    7)bash执行命令过程:分析命令-变量求值-命令替代(``$( ))-重定向-通配符展开-确定路径-执行命令

    8)( )command group置于sub-shell执行,也称nested sub-shell,有一点非常重要的特性是:继承父shellStandard input, output, and error plus any other open file descriptors

    3、示例

    1)cat>catfile <test.sh  #cattest.sh获得输入数据,然后输出给文件catfile

    2)cat > catfile  #从标准键盘获得数据,输出到catfile

    3)cat>catfile <<eof  #这里,"<<",代表"结束的输入字符"。当空行输入eof字符,输入自动结束,不用ctrl+D

    4)cat <>file 以读写的方式打开 file

    5)cmd << delimiter >file,从stdin 中读入,直至遇到 delimiter 分界符

    4、exec

    1)exec命令:常用来替代当前shell 并重新启动一个shell,也就是说,并没有启动子shell。使用这一命令时任何现有环境都将会被清除。exec在对文件描述符进行操作的时候,不会覆盖当前的shell环境。

    2)命令格式

    exec 文件描述符[n] <> file或文件描述符或设备

    3)在上面所述的输入,输出重定向,将输入,输出绑定文件或设备后,只对当前那条指令是有效的,如果需要在绑定之后,接下来的所有命令都支持的话,就需要用exec命令。

    5、exec示例

    1)exec 6>&1  #将标准输出与fd 6绑定

        ls /proc/self/fd/

    2)exec 1>&6  #恢复标准输出

    3)exec 6>&-  #关闭fd 6描述符

    参考

    1man手册

    2】 总结不错

    http://hi.baidu.com/xxjyz/blog/item/59bbbb0394856d1c4bfb51ee.html

    http://blog.163.com/zhoumhan_0351/blog/static/39954227201061045630711/

    3】 好文

    http://www.360doc.com/content/11/0720/15/379588_134716249.shtml

    4】 讲解也比较清晰

    http://www.xxlinux.com/linux/article/development/shell/2006-10-16/5018.html

  • 相关阅读:
    关于PHP程序员技术职业生涯规划
    让PHP7达到最高性能的几个Tips
    php-fpm解读-进程管理的三种模式 及 worker进程、master进程详解
    CGI、FastCGI和php-fpm概念和区别
    什么是PHP7中的孤儿进程与僵尸进程,加上守护进程
    PHP 信号管理知识整理汇总
    PHP多进程---fork多个子进程,父进程阻塞与非阻塞
    锁存器、触发器和寄存器
    FPGA基础之锁存器与触发器的设计
    从CMOS到触发器(二)
  • 原文地址:https://www.cnblogs.com/mydomain/p/2216253.html
Copyright © 2011-2022 走看看