누군가 이 명령이 작동하는 이유를 설명할 수 있습니까?
gpg --enable-special-filenames --verify --batch \
<(curl -s https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2.sig) \
<(curl https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2)
"curl: (23) Failedwriting body (0 != 4096) (23) Failedwriting body" 오류 메시지와 함께 실패함:
gpg --enable-special-filenames --verify --batch -- '-&3' '-&4' \
3<(curl -s https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2.sig) \
4<(curl https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2)
답변1
특정 파일 설명자로 리디렉션사용 3< file
.프로세스 대체을 사용하여 <( ... )
두 가지를 결합하려면 사용해야 합니다.둘 다:
3< <( ... )
공간은 중요합니다. 그렇지 않으면 노력하는 것으로 해석됩니다.여기 문서로 종료되지만 (
유효하지 않으며 구문 분석 오류가 발생합니다.
명령 gpg
줄은 다음과 같아야 합니다.
gpg --enable-special-filenames --verify --batch -- '-&3' '-&4' \
3< <(curl -s https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2.sig) \
4< <(curl https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2)
curl
이는 일반 파일에서 읽은 것처럼 첫 번째 명령의 출력을 설명자 3으로 리디렉션하고 두 번째 명령의 출력을 설명자 4로 리디렉션합니다 .
그런 식으로<( ... )
일하다명령을 실행하고 해당 출력을 FIFO 또는 그 아래 항목에 연결한 /dev/fd
다음 <( ... )
파일이 처음에 작성된 것처럼 명령줄의 일반 인수로 파일 경로를 대체한다는 것입니다. 그러면 파일 경로를 리디렉션과 같은 다른 구성과 함께 사용할 수 있습니다.
원래 명령은 결국 실행되고 gpg ... 3/dev/fd/63 4/dev/fd/64
, curl
작성된 내용에 아무도 관심이 없다는 사실을 발견하고 오류를 보고합니다. 또한 파일이 출력 gpg
에는 숨겨져 있지만 파일이 존재하지 않는다는 오류가 발생합니다 .curl