나는 알고있다이 답변다양한 Unix 유틸리티는 사용자가 일반 파일 대신 stdin 또는 stdout을 사용하기를 원함을 지정하기 위해 기본 대시를 사용합니다.
그러나 이는 다음 구문을 이해하는 데 큰 도움이 되지 않습니다(기본적으로 디렉터리에 Perl 복사본을 설치하는 Heroku 빌드팩에서 얻었습니다). 전반적으로 Perl은 $PERL_PACKAGE의 URL에서 다운로드되고 tar로 파이프되어 $VENDORED_PERL 디렉터리로 추출됩니다.
curl $PERL_PACKAGE -s -o - | tar xzf - -C $VENDORED_PERL
그러나 세부 사항은 약간 혼란 스럽습니다. -o는 출력 파일을 지정하는 데 사용됩니다.대신에stdout이므로 해당 옵션을 사용하고 옵션을 전혀 사용하지 않는 대신 대시를 사용하는 이유를 이해할 수 없습니다.
tar의 경우 내 생각에는 파이프에서 입력을 받기 때문에 입력 파일을 사용하지 말라고 말하는 것입니까?
어쩌면 파이프라인 작동 방식에 대한 몇 가지 요구 사항이 누락되었을 수도 있습니다.
답변1
f -
또한 "표준 입력에서 읽기"/"표준 출력에 쓰기"를 의미합니다 tar
. 그러나 기본 소스/대상은 tar
버전과 구현에 따라 다를 수 있으므로 명령에 추가하는 것이 더 안전해 보입니다.
-o -
필요하지 않은 경우 curl
명령 작성자가 이를 알지 못했을 수도 있고 이 명시적인 정보를 사용하면 명령을 더 쉽게 이해할 수 있을 것이라고 생각했을 수도 있습니다.
답변2
나는 당신이 아무것도 놓치고 있다고 생각하지 않습니다. 당신이 언급한 옵션은 curl
제가 최근 몇 년간 사용한 모든 쉘과 구현에서는 필요하지 않습니다.tar
나는 다음과 같이 줄을 쓸 것입니다 :
curl "$PERL_PACKAGE" -s | tar xz -C "$VENDORED_PERL"
즉, 불필요한 파일 이름 옵션이 없으며 명령줄 인수로 사용되는 변수에는 보수적인 큰따옴표가 사용됩니다.
그들은 왜 이것을 쓰는가? 어쩌면 오래된 습관일 수도 있습니다. 또는 이러한 매개변수가 필요했던 일부 오래된 시스템, 오래된 구현. 스크립트는 있는 그대로 실행되므로 "수정"할 사항이 없습니다.