입력/출력 파일에서만 작동하는 프로그램을 파이프라인에 포함하려면 어떻게 해야 합니까?

입력/출력 파일에서만 작동하는 프로그램을 파이프라인에 포함하려면 어떻게 해야 합니까?

파이프라인에서 여러 도구를 사용하여 이미지를 처리해야 합니다 tool1 | tool2 | tool3 | .... 하지만 도구 중 하나는 파이프라인에서 작동하도록 설계되지 않은 것으로 보이며 user@computer:/~# bad_tool infile.png outfile.png.

이것을 파이프라인에 통합할 수 있는 방법이 있나요? 나는 이 유일한 프로그램을 위한 파일을 생성하고 삭제하는 등의 작업을 피하고 싶습니다.

답변1

파이프가 일반적으로 다음과 같은 경우:

tool1 | tool2 | tool3

하지만 도구 2는 "나쁘다". 2개의 매개변수를 사용합니다(첫 번째는 입력 파일이고 두 번째는 출력 파일). 다음과 같이 다시 작성할 수 있습니다.

tool2 <(tool1) >(tool3)

물론 쉘이 지원하는 경우프로세스 교체.

답변2

이것이 당신에게 좋다고 생각된다면, 파이프를 사용하여 이를 수행하는 방법에 대한 제안이 있습니다.

"badtool"의 입력 및 출력 파일은 파이프일 수 있다고 가정합니다.

mkfifo IF
mkfifo OF

# one therminal
tool | tool2 |... tooln > IF

# second terminal
bad_tool IF OF

#third terminal
tooln+1 < OF | tool n+2 | tool n+3 ...

스크립트를 생성하려면 다음 부분을 함수로 래핑할 수 있습니다.

function A(){ ... }
function B(){ ... }
function C(){ ... }
# and run in background in parallel
A&
B&
C&

IF모든 이미지(파이프라인 및 "재사용 가능") 를 계속 처리 OF하고 전체 작업이 완료되면 삭제합니다.

rm IF OF

답변3

리눅스였다면 이렇게 할 수 있었을 텐데

bad_tool /dev/stdin /dev/stdout

/dev/stdin그리고 (각각) 심볼릭 링크 /dev/stdout만 있습니다 ./proc/self/fd/{0,1}

관련 정보