나는 shasum을 추출해야했습니다. 이것은 작동하지만 아무도 이유를 설명 할 수 있습니까?
sed 's/^.*= //' -< <(openssl dgst -sha256 filename)
나는 $( )
구문에 익숙 하지만에 대한 문서를 찾을 수 없으며 <( )
와 함께 STDIN으로 -<
리디렉션한다고 가정합니다 sed
.
더 쉬운 방법이 있다는 것을 알고 있지만이 구성은 나를 피합니다.
답변
그만큼
<(openssl dgst -sha256 filename)
construct는 프로세스 대체 입니다. 씬 뒤에 파일 (또는 FIFO)을 만들고 해당 이름을 명령 시퀀스로 다시 전달합니다.
<
있는 일반 파일 리디렉션에 무대 뒤의 파일의 내용을 리디렉션 stdin
및
-
은 sed
입력이에서 온 것을 나타내는 것으로 인식되는 자리 표시 자 입니다 stdin
.
sed
파일을 완벽하게 읽을 수 있기 -<
때문에이 문맥에서는 불필요하게 보입니다.
sed 's/^.*= //' <(openssl dgst -sha256 filename)
잘 작동합니다.
답변
<( COMMAND )
배시 구조체는 호출 프로세스 교체 .
COMMAND
내부를 평가 하고 출력을 가상 파일 디스크립터를 /dev/fd
지정된 내부로 가져 오는 명명 된 파이프 인 FIFO로 경로 재 지정합니다. 평가 된 명령의 출력을 포함하는 임시 파일처럼 작동합니다.
<
배시 구조체는 호출 입력 재 .
오른쪽에 파일 디스크립터를 가져 와서 내용을 왼쪽에있는 명령의 STDIN (표준 입력)으로 경로 재 지정합니다.
는 -
배쉬 구조 아닙니다 그러나 에 대한 인수sed
즉, 입력 파일을 지정합니다. 특수 값 -
은 STDIN 에서 읽는 것을 의미합니다 (이 또한 sed
기본값이므로 생략 할 수 있음).
sed 's/^.*= //' - < <(openssl dgst -sha256 filename)
이 라인은 먼저 openssl dgst -sha256 filename
FIFO에서 출력을 실행 하고 캐시합니다. 이 명명 된 파이프를 나타내는 파일 디스크립터는의 STDIN으로 경로 재 지정되는 입력 파일로 처리됩니다 sed 's/^.*= //' -
. 이 sed
명령은 STDIN에서 읽고 “=”기호 앞에 공백이 오는 모든 문자를 제거합니다.