두 프로그램의 stdout을 서로 파이프로 연결

두 프로그램의 stdout을 서로 파이프로 연결

두 개의 프로그램이 있는데 그 중 하나가 먼저 무언가를 인쇄하고 표준 IO를 통해 서로 통신해야 합니다.

Bash에서 두 프로그램의 stdout을 서로 파이프로 연결하는 방법이 있나요? 포크와 덤프를 사용하여 C에서 이 작업을 수행할 수 있다는 것을 알고 있지만 순수 Bash를 사용하는 방법이 있습니까?

답변1

파이프를 "루프"하는 명명된 FIFO를 생성합니다.

mkfifo myfifo
<myfifo program1 | program2 >myfifo
rm myfifo

어떤 프로그램도 먼저 아무것도 인쇄하지 않더라도 FIFO에 데이터를 "주입"하여 다음으로 수신할 수 있습니다 program1.

# from another console
echo start >myfifo

통신을 관찰/저장하려면 tee올바른 장소에 사용하세요. 예:

<myfifo program1 | program2 | tee myfifo
<myfifo program1 | tee /dev/tty ./log1 | program2 | tee ./log2 >myfifo

모든 것이 에서 작동하며 sh이 솔루션에는 Bash와 관련된 내용이 없습니다.

읽어주세요이 답변교착 상태로 이어지는 가능한 시나리오에 대해 설명합니다.

관련 정보