bash에서 -와 함께 사용할 때 <<와 >>의 차이점

bash에서 -와 함께 사용할 때 <<와 >>의 차이점

이는 rpm 패키지에 대한 스크립트를 볼 때 접한 것처럼 약간 구체적일 수 있습니다. 초기 패키지는 다음과 같습니다.

rpm --import - << EOF
GPG
KEY
HERE
EOF

다음 오류로 인해 이 작업이 실패했습니다. -: 읽기 가져오기에 실패했습니다(0).

패키지가 수정되어 이제 다음 문제 없이 설치됩니다.

echo "GPG
KEY
HERE" >> rpm --import -

첫 번째는 실패하고 두 번째는 실패하는 이유를 이해할 수 없습니다. 또한, 가질 수 있습니까?

echo "GPG
KEY
HERE" | rpm --import -

옵션으로?

미리 감사드립니다!

답변1

첫 번째 예에서는 인스턴스 사이의 텍스트를 변수 보간법을 사용하여 큰따옴표로 묶은 문자열로 처리합니다 (즉, EOF역따옴표와 확장자로 시작하거나 그 안에 있는 모든 변수, 명령 및 표현식을$ 평가합니다). 이것은 다음과 같다표준 입력rpm명령 에 .

두 번째 인스턴스는 다음 세 줄을 추가합니다(변수 보간도 사용).

GPG
KEY
HERE --import -

rpm현재 디렉터리의 파일로 이동합니다. 특별한 관심이 지불됩니다rpm명령을 실행하지 않습니다.

세 번째 옵션은 세 줄을 작성합니다(역시 변수 보간법 사용).

GPG
KEY
HERE

~처럼표준 입력명령을 위해rpm --import -

모든 경우에 문자열 주위에 큰따옴표 대신 작은따옴표를 사용하거나 큰따옴표(첫 번째 경우 사용 <<'EOF')를 사용하지 않으면 변수의 확장 및 보간을 방지할 수 있습니다.

또한 읽기를 위한 마커로 사용 rpm되지 않는 것 같습니다.-표준 입력, 따라서 어떤 옵션도 원하는 것을 얻을 수 없습니다. GPG 키를 파일에 쓰거나 <( echo... )대신 이 구성을 사용해야 합니다 -.

관련 정보