Linux一日一技(1):bash进程替换

2019-07-08 15:09:43 浏览数 (1)

进程替换允许使用文件名引用进程的输入或输出。它采取的形式

代码语言:javascript复制
<(list)

or

代码语言:javascript复制
>(list)

进程列表以异步方式运行,其输入或输出显示为文件名。作为扩展的结果,此文件名作为参数传递给当前命令。

左括号和(>|<)间不能有空格,否则会认定为重定向。

Example 1

代码语言:javascript复制
[root@icecube ~]# cat 1.sh 
#!/bin/bash
seq 10
[root@icecube ~]# bash 1.sh 
1
2
3
4
5
6
7
8
9
10
[root@icecube ~]# while read line;do echo $line;done < `bash 1.sh`
-bash: `bash 1.sh`: ambiguous redirect
[root@icecube ~]# while read line;do echo $line;done < <(bash 1.sh)
1
2
3
4
5
6
7
8
9
10

在此示例,我们将执行脚本的输出通过while循环打印, 若采用`bash 1.sh`命令替换写法将直接报错,而通过进程替换则完美得到我们想要的结果。

<和<()间应有空格。<从文件读取,<()为进程替换,把命令输出的内容当作一个文件。

Example 2

代码语言:javascript复制
[root@icecube ~]# cat 1.txt  
1
2
3
4
5
[root@icecube ~]# cat 2.txt  
a
b
c
d
e
[root@icecube ~]# # 等价与cat 2.txt >>1.txt
[root@icecube ~]# sed '$r'<(cat 2.txt) 1.txt
1
2
3
4
5
a
b
c
d
e
[root@icecube ~]# # 配合<<here document可以帮助我们省略掉临时文件
[root@icecube ~]# sed '$r'<(cat<<EOF
> a
> b
> c
> d
> e
> EOF) 1.txt 
1
2
3
4
5
a
b
c
d
e

0 人点赞