“<<(…)”리디렉션이란 무엇입니까?


32

rvm (ruby version manager)이 다음 명령을 사용하여 설치되는 것을 보았습니다.

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

그래서 내가 이해로 우리는 스크립트 콘텐츠를하고 떠들썩한 파티에 전달 (나는 생각 < <하고 <<? 같은 일이다) 나는에 관심이 < <부분, 그물에 설명을 다음 발견 :

<< 토큰 평균은 토큰이 보일 때까지 현재 입력 스트림을 프로그램의 STDIN으로 사용합니다.

이것은 어떻게 든 명확하지 않습니다. 누군가가 더 간단한 방법으로 모범을 보이거나 설명 할 수 있습니까?

답변:


40

아니, < <<<같은 것이 아니다.

첫 번째는 구문 <의 첫 번째 문자와 결합 된 공통 리디렉션 문자 로 구성 됩니다 <(command). 이것은 프로세스 대체로 알려진 ksh구조 ( bash및로 도 있음 zsh)로 , 출력을 가져 와서 파이프의 다른 쪽 끝 이 작성되는 이름을 가진 파일로 제공합니다 .commandcommand

다시 말해 , 파일은의 출력을 포함하는 < <(command)것으로 생각할 수 있습니다 .< filecommand


5
며칠 전에이 명령에 대해 배웠는데 매우 유용한 명령입니다. 당신이 할 수있는 일은 당신의 상상력에 의해서만 제한됩니다 : 예를 diff <(ls) <(ls -a)
들어이

1
이 구문은 실제로 매우 유용 할 수 있지만 Stonerain의 특정 사례에서는 간단한 파이프와 비교하여 부가 가치를 제공하지 않는 것 같습니다.
jlliagre

1
위의 구문에서는 도움이되지 않습니다. 그러나 약간 변경하면 훨씬 낫습니다. bash <(curl ...)대신 bash < <(curl ...)STDIN을 훔치지 않으므로 프롬프트에 응답하고 스크립트에 입력 할 수 있습니다.
tylerl

<()를 사용하는 것은 $ variables를 먼저 파일에 쓸 필요없이 여러 $ variables를 명령에 직접 보내는 훌륭한 대안으로 보입니다. diff <(에코 "$ text1") <(에코 "$ text2") stackoverflow.com/questions/13437104/…
Sepero

18

더 간단한 작업을 수행하는 복잡한 방법입니다.

curl -s https://raw.github.com/... | bash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.