Bash 리디렉션의 "-"는 어떻게 작동하나요?

Bash 리디렉션의 "-"는 어떻게 작동하나요?

이전에 어딘가에서 이에 대한 설명을 본 적이 있지만 지금은 참조를 찾을 수 없습니다. Ubuntu docker 시작 가이드의 사용 예:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

나는 그것이 무엇을 하기로 되어 있었는지 막연하게 기억한다. IIRC 맞습니다. 파이프를 통해 전달된 표준 입력을 어떻게든 사용해야 합니다. 그런데 이 경우 왜 이것이 필요한가?

내가 찾은 가장 가까운 기사는 다음 기사입니다.http://www.catonmat.net/blog/bash-one-liners-explained-part-Three/. 어쩌면 비표준 스트림을 열었다가 닫는 예에서처럼 스트림을 닫는 것과 관련이 있는 것일까요?

exec 3<file
exec 3>&-

답변1

이는 Bash나 다른 셸의 기능은 아니지만 많은 응용 프로그램 에서 stdin. 다른 파일과 함께 처리되기를 바랍니다. 예 를 들어 파일 과 .stdinstdincat foo -catfoostdin

의 경우 apt-key,매뉴얼 페이지add하위 명령 에 파일 이름을 제공하는 것이 필수이며 -사용되도록 지정해야 함을 의미합니다 stdin. 원하는 작업을 수행하고 원하는 입력을 읽는 것은 응용 프로그램에 달려 있다는 점을 명심하십시오 stdin. 기본 입력 소스로 사용하는 것은 습관의 문제일 뿐입니다.

-일부 프로그램은 의미를 지원하지 않으며 stdin이를 리터럴 파일 이름으로 취급합니다. 이러한 경우에는 이와 같은 해결 방법이 /dev/stdin필요합니다.


에 관해서는 >&-명시적으로 연결되어 있는 것을 볼 수 없습니다. 이는 단순한 문자를 실수로 사용한 것일 수 있습니다. 대시는 >&-"없음"(빈 필드)을 나타내는 파업과의 연결에서 나올 수 있습니다. 왜 이런 뜻인지 stdin모르겠습니다. 하지만 이것보다 더 좋아 보이거나 비슷 %하고, 다른 많은 문자들은 다른 의미를 가지고 있습니다.

답변2

-매개변수는 일반적으로(일부 명령의 경우) "stdin 입력"을 의미합니다.

따라서 이 명령 파이프라인은 다음과 같습니다( 로 구분된 두 명령 |).

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

-표준 입력에서 읽도록 apt-key에 지시합니다 .

이 입력(stdin)은 파이프의 입력입니다. 컬 출력.

관련 정보