Linux: 进程替代 >(command) <(command)

进程替换(process substitution):

将临时文件作为某个进程的输入或输出的一种重定向。

<(command) : 将括号()里的命令执行后,输出作为一个临时文件,这个临时文件通常存在 /dev/fd/目录下

>(command) : 将之前命令的输出视为一个临时文件,作为括号()里命令的输入

先看下面这个例子:

$ echo <(ls)  
/dev/fd/63

# 先执行ls命令,结果输出到临时文件中(/dev/fd/63)
# 这里<(ls)就指代这个文件的路径(/dev/fd/63)
# 这个文件的内容是ls命令的结果
# 所以 echo <(ls) 约等于
# echo /dev/fd/63

$ ls > >(cat)
#将ls命令的结果输出到/dev/fd/目录下某个临时文件中
#将临时文件作为括号内命令cat的输入 执行
#结果上和ls单独执行一样

也就是说进程替换实际上就是将进程与/dev/fd/目录下的某个临时文件相关联,然后这个临时文件可作为后续命令的输入输出。

实际操作中,使用进程替换可以大幅简化代码,

诸如下面这个例子:

#分别提取三个文件的第一行,然后paste
$ paste -d' '  <(cut -f 1 file1.txt ) <(cut -f 1 file2.txt ) <(cut -f 1 file3.txt )
1 1 pear 1 pear x
2 2 apple 2 apple y
3 3 banana 3 banana z
4 5 kiwi 5 kiwi q

进程替换可以嵌套

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Twitter picture

您正在使用您的 Twitter 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s