'-<<(…)'을 사용한 명령 출력 리디렉션


10

나는 shasum을 추출해야했습니다. 이것은 작동하지만 아무도 이유를 설명 할 수 있습니까?

sed 's/^.*= //' -< <(openssl dgst -sha256 filename)

나는 $( )구문에 익숙 하지만에 대한 문서를 찾을 수 없으며 <( )와 함께 STDIN으로 -<리디렉션한다고 가정합니다 sed.

더 쉬운 방법이 있다는 것을 알고 있지만이 구성은 나를 피합니다.

답변:


10

그만큼

<(openssl dgst -sha256 filename)

construct는 프로세스 대체 입니다. 씬 뒤에 파일 (또는 FIFO)을 만들고 해당 이름을 명령 시퀀스로 다시 전달합니다.

< 

있는 일반 파일 리디렉션에 무대 뒤의 파일의 내용을 리디렉션 stdin

-

sed입력이에서 온 것을 나타내는 것으로 인식되는 자리 표시 자 입니다 stdin.

sed파일을 완벽하게 읽을 수 있기 -<때문에이 문맥에서는 불필요하게 보입니다.

sed 's/^.*= //' <(openssl dgst -sha256 filename)

잘 작동합니다.


3
openssl ... | sed '...'
Miles

8

<( COMMAND )배시 구조체는 호출 프로세스 교체 .

COMMAND내부를 평가 하고 출력을 가상 파일 디스크립터를 /dev/fd지정된 내부로 가져 오는 명명 된 파이프 인 FIFO로 경로 재 지정합니다. 평가 된 명령의 출력을 포함하는 임시 파일처럼 작동합니다.


<배시 구조체는 호출 입력 재 .

오른쪽에 파일 디스크립터를 가져 와서 내용을 왼쪽에있는 명령의 STDIN (표준 입력)으로 경로 재 지정합니다.


-배쉬 구조 아닙니다 그러나 에 대한 인수sed 즉, 입력 파일을 지정합니다. 특수 값 -STDIN 에서 읽는 것을 의미합니다 (이 또한 sed기본값이므로 생략 할 수 있음).


sed 's/^.*= //' - < <(openssl dgst -sha256 filename)

이 라인은 먼저 openssl dgst -sha256 filenameFIFO에서 출력을 실행 하고 캐시합니다. 이 명명 된 파이프를 나타내는 파일 디스크립터는의 STDIN으로 경로 재 지정되는 입력 파일로 처리됩니다 sed 's/^.*= //' -. 이 sed명령은 STDIN에서 읽고 "="기호 앞에 공백이 오는 모든 문자를 제거합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.