IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Linux Shell编程(28)——进程替换

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


    命令替换的一般形式


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


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

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


    Bash在两个文件描述符(file descriptors)之间创建了一个管道, --fIn 和 fOut--. true命令的标准输入被连接到fOut(dup2(fOut, 0)), 然后Bash把/dev/fd/fIn作为参数传给echo.如果系统的/dev/fd/
    文件不够时,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/
    的系统属性, # 所以两个命令之间的管道不必是命名的. # # 这种效果可以模仿出来. # 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>&-



沪ICP备19023445号-2号
友情链接