命令替换的一般形式
由圆括号括起的命令
>(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>&-