베어 <는 무엇을 하는가?


10

bash 다음과 같은 명령을 실행하면 불평하지 않는 것 같습니다.

$ < some-file-that-exists

아무것도 일어나지 않는 것 같습니다.

당신은 또한 사용할 수 있습니다

$ <<<"any string"

심지어 프로세스 대체.

이것이 정확히 무엇을하며 왜 허용됩니까? 무엇이든 유용 할 수 있습니까?


BTW : 위대한 ZSH의 경우 "<foobar"는 셸로의 리디렉션 foobar와 "less foobar"와 동일합니다. 나는 이것이 매우 직관적 인 행동이라고 생각합니다. 인수가 주어지지 않으면 맨손으로 <오류 ( zsh: parse error near `\n') 가 발생 합니다.
math

@math에서 비슷한 오류가 발생 bash하지만 흥미 롭습니다 less.
폭발 환약

답변:


20

<리디렉션 명령 전후에 발생할 수있는 명령에 대한 리디렉션을 설정합니다. 즉

$ < file wc

뿐만 아니라 작동

$ wc < file

그러나 명령을 제공하지 않으면 bash는 리디렉션을 설정하고 다른 작업을 수행하지 않습니다. 입력 경로 재 지정의 경우 파일이 존재하고 읽을 수있는 경우이 값은 아무것도 아닙니다. 파일이 존재하지 않거나 읽을 수없는 경우 bash는 오류를 표시합니다. 출력 경로 재 지정의 경우 출력 파일이 없으면 작성됩니다. >사용 하면 기존 출력 파일이 잘립니다 . >>사용하는 경우 잘림이 없습니다 .


다시 말해, 그들은 간결한 존재이며 창조합니다
ratchet freak

@Kyle Jones 마지막 문장에서 두 연산자가 일치하지 않는다고 생각합니다.
jamesbtate

@Puddingfox 감사합니다. 나는 명확하게하기 위해 마지막 문장을 편집했습니다.
Kyle Jones

< file wcvs 를 사용해야 할 이유가 wc < file있습니까?
폭발 약

1
@tandu 대화식 쉘을 사용할 때 편리합니다. 리디렉션을 사용하는 명령이 있고 다른 마지막 인수로 반복하고 싶다고 가정 해보십시오. 리디렉션이 줄의 시작 부분에 있으면 control-P를 입력 한 다음 "<foo> bar 2> & 1"언어를 건너 뛰지 않고 마지막 인수를 쉽게 편집 할 수 있습니다. 그 외에도 나는 그것을 쓸모가 없다.
Kyle Jones

5

<기본적으로 stdin 또는 파일을 읽습니다. 읽은 후에는 아무 것도하지 않았기 때문에 식은 입력과 관련이 없습니다.

마지막에 <some-file-thats exist> outputfile을 수행하면 첫 번째 파일의 내용을 읽고 두 번째 파일에 썼음을 알 수 있습니다.

<<<는 여기 doc 형식이므로 파일 대신 문자열에서 읽습니다. cat <<< "모든 문자열"을 읽은 내용을 봅니다.


2
나중에 참조 할 수 있도록 주석을 추가하는 대신 세부 정보를 추가하려면 답변을 편집하십시오.
Nate Koppenhaver

2
"끝에 <some-file-thats exist> outputfile을 수행하면 첫 번째 파일의 내용을 읽고 두 번째 파일에 썼음을 알 수 있습니다." 이것은 잘못이다. 명령이 없으면 출력 파일이 0 바이트로 잘립니다.
Kyle Jones
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.