「명령의 출력을 파일처럼」 다른 명령에 넘기는 강력한 기능.
<(cmd) 형식.
bash·zsh 지원, sh는 안 됨.
diff에 활용.
diff <(ls dir1) <(ls dir2) — 두 ls 출력의 차이.
임시 파일 안 만들고 직접 비교.
파일 정렬 차이 비교 등에 매우 자주.
여러 stream.
command < <(other) — other의 출력을 command의 입력으로(파이프 비슷).
차이 — 파이프는 stdout만, process substitution은 어느 「입력 자리」에든 가능.
출력 substitution.
>(cmd) — command가 그 자리에 쓴 데이터가 cmd에 stdin으로.
echo "text" | tee >(grep ERROR) >(grep WARN) > /dev/null — tee가 두 grep으로 동시에 보냄.
한 데이터를 여러 처리에 분배.
주의.
1) bash 전용(POSIX 아님).
#!/bin/sh 아닌 #!/bin/bash 명시.
2) 디버깅이 어려움 — 임시 파일이 자동 생성되어 보이지 않음.
3) 너무 복잡하면 그냥 임시 파일 + 단계 분리가 가독성 좋음.
한 줄 요약
process substitution <(cmd)·>(cmd)는 명령 출력을 파일처럼.
diff <(a) <(b)로 임시 파일 없이 비교, tee >(grep)로 분배.
bash 전용, 가독성 주의.
더 알아볼 것
- named pipe와의 비교
- tee + 여러 grep 분배
- fd 명세 — /dev/fd/63 등