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


  • 相关阅读:
    七. 多线程编程3.主线程
    七. 多线程编程1.线程的概念
    六. 异常处理12.断言
    liunx 安装 mysql 5.6
    idea Unable to open debugger port (127.0.0.1:58006) Address already in use: JVM_Bind 的解决办法
    liunx 安装redis 4.0
    liunx 安装jdk1.8
    idea 去除xml文件sql语句背景色
    改变数据库和表编码
    mybatis 按in 函数参数顺序排序
  • 原文地址:https://www.cnblogs.com/new0801/p/6176852.html
Copyright © 2011-2022 走看看