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>&-


  • 相关阅读:
    java学习:字符串比较“==”与“equals”的差异及与c#的区别
    航空8联货运单的作用详解
    flash:二次贝塞尔曲线应用生成飞机路径示意图
    javascript:双链表插入排序
    javascript:算法笔记
    玩聚RT 加入对饭否的统计
    随手小记:创业瞎聊十点
    Python的win32serviceutil之疑似BUG
    撕书记忆法
    中文锐推榜优化·二
  • 原文地址:https://www.cnblogs.com/new0801/p/6176852.html
Copyright © 2011-2022 走看看