다음 명령의 차이점은 무엇입니까?
$ input.txt > grep foo
$ grep foo < input.txt
$ cat input.txt | grep foo
$ grep foo input.txt
그리고 그것뿐만이 아니다 grep
. 다른 명령도 마찬가지다.
답변1
input.txt > grep foo
이는 버그일 수 있습니다. 그것은 작동한다주문하다input.txt
그리고 출력을 이라는 파일로 리디렉션합니다grep
. 이는foo
명령에 대한 인수입니다input.txt
.grep foo < input.txt
foo
입력에서 문자열을 찾습니다input.txt
.grep
명령줄에서 파일 이름을 가져오지 않으므로 표준 입력에서 작동합니다. 쉘은 파일의 내용input.txt
이grep
.cat input.txt | grep foo
이는 이전 것과 유사하지만 이제 표준 입력 스트림이 명령이 파일의 내용을 전달하는grep
파이프에 연결됩니다 . 이 명령은 표준 입력 스트림으로 파이프 되는 표준 출력 스트림에 씁니다 .cat
input.txt
cat
grep
grep foo input.txt
그러면grep
파일이 열리고 그 안에 있는 문자열을input.txt
찾습니다 .foo
표준 입력 스트림을 사용하지 않습니다.
일반적으로 말하면:
Pipe(
|
)는 왼쪽의 표준 출력 스트림을 오른쪽의 표준 입력 스트림과 연결합니다.InputRedirect(
<
)는 파일에서 표준 입력 스트림으로 리디렉션합니다.OutputRedirect(
>
)는 표준 출력을 파일로 리디렉션합니다.입력 및 출력 스트림은 예를 들어 를 사용하여 동시에 리디렉션될 수 있으며
commandname <inputfile >outputfile
명령은 파이프에 읽고 쓸 수 있습니다command1 | command2 | command3
.리디렉션과 파이프를 결합할 수 있습니다:
cat <input.txt | grep foo >output.txt
.
많은 Unix 유틸리티는 입력 파일 이름을 선택적 인수로 사용합니다. 파일 이름이 지정되지 않으면 표준 입력이 사용됩니다.
일부 유닉스 유틸리티오직표준 입력(예 tr
: .
Bash 및 기타 셸 (예 ksh
:<<<"string"
여기에 있는 문자열), 대부분의 쉘은 이해합니다여기 문서(이것을 찾으십시오).