프로세스 대체에서 <(명령)과 >(명령)의 차이점

프로세스 대체에서 <(명령)과 >(명령)의 차이점

존재하다프로세스 교체두 가지 구문을 볼 수 있습니다.

>(command_list)

그리고

<(command_list)

나는 종종 두 번째 구문을 사용합니다. 그런데 둘의 차이점이 뭔지 모르겠네요? 검색해본 결과 특별한 결과는 나오지 않았습니다.

답변1

너는 사용한다:

consumer <(feeder)

~을 위한산출of는 stdin에서 입력을 얻을 수 없는 경우 (이 경우에는 를 사용함 ) feeder에 공급되지만 인수로 주어진 파일 이름에서만 입력을 얻을 수 있습니다.consumerconsumerfeeder | cousumer

이 경우 feeder출력은 파이프의 쓰기 끝이고 확장자는 <(feeder)파일 이름( /dev/fd/<x>지원되지 않는 시스템에서는 명명된 파이프일 수 있지만 일반적으로 ) 이며 /dev/fd/<n>일단 열리면(에 의해)consumer읽다튜브의 끝입니다.

대칭적으로 다음을 사용합니다.

feeder >(consumer)

feeder출력을 stdout(다시 수행할 수 있음)으로 보내지 않고 feeder | consumer이름을 인수로 전달해야 하는 파일로 보내는 명령의 경우 .

consumer그럼입력하다는 파이프의 읽기 끝이며 파이프의 쓰기 끝에 도달하기 위해 >(consumer)열리면(를 통해 전달된) 파일 이름으로 확장됩니다 .feeder

<(...)다음과 같이 여러 입력이 필요한 명령에 유용하기 때문에 더 일반적으로 사용됩니다 .

diff -u <(cmd1) <(cmd2)

명령이 여러 출력을 생성하거나 명령이 출력을 stdout으로 보낼 수 없는 경우는 흔하지 않습니다. 일반적인 예외는 다음과 같습니다.

feeder | tee >(consumer1) >(consumer2) | consumer3

그 중에는 tee일부 출력을 여러 파일(stdout 외에도)에 병렬로 보내는 일반적인 명령이 있습니다.

다음과 같은 내용을 본 적이 있을 것입니다.

tar cf - somedir |
 gzip -9 |
 tee >(shasum > dir.tgz.shasum) >(md5sum > dir.tgz.md5sum) > dir.tgz

체크섬을 생성 하고 저장하는 동안 출력 gzip(여기서는 압축된 tar 아카이브)을 출력 파일로 보냅니다.shasummd5sum

관련 정보