bash ‘<(file contents)’구문은 무엇입니까? StackExchange에 대한 이 답변 은 흥미로운 bash

Security StackExchange에 대한답변 은 흥미로운 bash 구문을 사용하여 파일을 인라인으로 생성합니다.

openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650

이 비트는 특히 흥미 롭습니다 :

<(openssl ecparam -name secp384r1)

그냥 실행 :

echo <(openssl ecparam -name secp384r1)

난 돌아가 겠어 /dev/fd/63

따라서 이것은 파일 내용으로 임시 파일 설명자를 만드는 것 같습니다.

이것이 무엇입니까?



답변

프로세스 대체 라고 하며 bash, zsh 및 ksh의 기능입니다 (아마도 다른 사람들은 알지 못합니다). POSIX가 아니므로 이식 가능한 코드로 사용해서는 안되지만 매우 유용합니다.

bash 매뉴얼의 관련 섹션은 다음과 같습니다.

3.5.6 프로세스 대체

프로세스 대체는 명명 된 파이프 (FIFO) 또는 / dev / fd 열린 파일 이름 지정 방법을 지원하는 시스템에서 지원됩니다. 그것은 형태를 취합니다

  <(list) 

또는

  >(list) 

프로세스 목록은 입력 또는 출력이 FIFO 또는 / dev / fd의 일부 파일에 연결된 상태로 실행됩니다. 이 파일의 이름은 확장 결과로 현재 명령에 인수로 전달됩니다. > (list) 양식을 사용하는 경우 파일에 쓰면 목록에 대한 입력이 제공됩니다. <(list) 형식을 사용하는 경우 인수로 전달 된 파일을 읽어 목록의 출력을 확보해야합니다. <또는>와 왼쪽 괄호 사이에 공백이 없을 수 있습니다. 그렇지 않으면 구문이 리디렉션으로 해석됩니다.

사용 가능한 경우 프로세스 대체는 매개 변수 및 변수 확장, 명령 대체 및 산술 확장과 동시에 수행됩니다.


답변