Linux进程替换

Linux进程替换

需求:
把一个脚本或命令的错误输出和标准输出 同时显示在屏幕上,并且同时重定向到文件,错误的输出保存到错误文件,正确的输出保存到正确的文件

[root@huidu-hkle shell]# cat aa
#!/bin/bash
ls /txxx	#一个不存在的目录或文件,演示错误输出
echo "OK"	#演示正确输出

执行如下:
[root@huidu-hkle shell]# bash aa > >(tee out.txt) 2> >(tee erro.txt >&2)
ls: cannot access /txxx: No such file or directory
OK
[root@huidu-hkle shell]# ls out.txt erro.txt 
erro.txt  out.txt
[root@huidu-hkle shell]# cat out.txt 
OK
[root@huidu-hkle shell]# cat erro.txt 
ls: cannot access /txxx: No such file or directory
#使用临时文件来将一个文件中的字段提取并重新组合到另一个文件中
$ cut -f1 fileone >t1
$ cut -f5 filetone >t5
$ paste t1 t5 
#用进程替换可以无需临时文件完成此任务
$ paste -d: <(cut -d: -f1 /etc/passwd) <(cut -d: -f5 /etc/passwd) 
#进程替换支持嵌套
$ sort <(egrep -v ‘^#’ <(paste -d: <(cut -d: -f5 /etc/passwd)  <(cut -d: -f1 /etc/passwd) ) )
#语法检查不能使用sh -n ,必须使用 bash -n