zoukankan      html  css  js  c++  java
  • Linux Shell编程(28)——进程替换

    进程替换与命令替换很相似. 命令替换把一个命令的结果赋给一个变量,例如 dir_contents=`ls -al`或xref=$. 进程替换则是把一个进程的输出回馈给另一个进程 (换句话说,它把一个命令的结果发送给另一个命令).


    命令替换的一般形式


    由圆括号括起的命令
    >(command)
    <(command)


    启动进程替换. 它是用/dev/fd/<n>文件把在圆括号内的进程的处理结果发送给另外一个进程.

    在"<" 或or ">" 与圆括号之间是没有空格的. 如果加了空格将会引起错误信息.


    Bash在两个文件描述符(file descriptors)之间创建了一个管道, --fIn 和 fOut--. true命令的标准输入被连接到fOut(dup2(fOut, 0)), 然后Bash把/dev/fd/fIn作为参数传给echo.如果系统的/dev/fd/<n>文件不够时,Bash会使用临时文件. 

    cat <(ls -l)
    # 等同于     ls -l | cat
    
    
    sort -k 9 <(ls -l /bin) <(ls -l /usr/bin) <(ls -l /usr/X11R6/bin)
    # 列出系统中3个主要的'bin'目录的所有文件,并且按文件名排序.
    # 注意是三个明显不同的命令输出回馈给'sort'.
    
    
     
    diff <(command1) <(command2)    # 给出两个命令输出的不同之处.
    
    
    tar cf >(bzip2 -c > file.tar.bz2) $directory_name
    # 调用"tar cf /dev/fd/?? $directory_name",和"bzip2 -c > file.tar.bz2".
    #
    # 因为/dev/fd/<n>的系统属性,
    # 所以两个命令之间的管道不必是命名的.
    #
    # 这种效果可以模仿出来.
    #
    bzip2 -c < pipe > file.tar.bz2&
    tar cf pipe $directory_name
    rm pipe
    #        或者
    exec 3>&1
    tar cf /dev/fd/4 $directory_name 4>&1 >&3 3>&- | bzip2 -c > file.tar.bz2 3>&-
    exec 3>&-


  • 相关阅读:
    数据结构-链式结构-队列
    c数据结构-线性结构-队列
    栈的四则运算的运用
    C++/C—函数指针
    向显存写数据x8086
    结构体内存偏移量
    MFC-ComboBox控件的使用
    MFC的Edit text编辑框控件
    C/C++反汇编-各种表达式(加减乘)
    MFC- 学习控件-静态文本
  • 原文地址:https://www.cnblogs.com/new0801/p/6176852.html
Copyright © 2011-2022 走看看