<(왼쪽 V자형/삼각형 괄호)는 무엇을 합니까? [복사]

<(왼쪽 V자형/삼각형 괄호)는 무엇을 합니까? [복사]

>(오른쪽 갈매기형)은 프로그램의 STDOUT을 파일로 리디렉션하는 데 사용된다는 것을 알고 있습니다 . echo 'polo' > marco.txt콘텐츠로 이름이 지정된 텍스트 파일이 터미널 출력에 기록되는 대신 생성되기 때문입니다. 또한 이 보기에 표시된 대로 파이프 왼쪽에 있는 첫 번째 명령의 STDOUT을 파이프 오른쪽에 있는 두 번째 명령의 STDIN으로 리디렉션하는 데 사용되는 (파이프)와 그것의 차이점도 이해합니다.marco.txtpolo|echo 'Hello world' | lessHello worldless

나는 그것이 어떻게 작동하는지 정말로 이해하지 못합니다 <. 나는 그것을 시도했고 marco.txt < echo 'polo'bash는 나에게 오류를 주었다: -bash: echo: No such file or directory. 누군가 그것이 어떻게 작동하고 왜 사용해야 하는지 설명해 줄 수 있습니까?

답변1

< 연산자는 파일 내용을 리디렉션하는 데 가장 일반적으로 사용됩니다. 예를 들어

grep "something" < /path/to/input.file > /path/to/output.file 

이것은 input.file의 내용과 "something"을 포함하는 출력 라인을 출력.file로 가져옵니다.

> 연산자의 완전한 "역" 연산자는 아니지만 파일에 대해서는 제한된 의미를 갖습니다.

매우 훌륭하고 간단한 설명과 기타 응용 프로그램에 대해서는 <참조 IO 리디렉션

업데이트: < 연산자를 사용하여 bash에서 파일 설명자를 사용하는 방법에 대한 주석의 질문에 대답하려면 다음을 수행하십시오.

stdin(0), stdout(1) 및 stderr(2) 외에 추가 입력 및/또는 출력을 bash 환경에 추가할 수 있습니다. 이는 출력을 리디렉션할 위치를 지속적으로 전환하는 것보다 더 편리할 때도 있습니다. Bash에서 3개의 "표준" 입력/출력 옆에 있는 ()의 #은 "파일 설명자"입니다. 비록 Bash에서는 그런 방식으로 참조되는 경우가 거의 없습니다. C에서는 더 일반적이지만, 그럼에도 불구하고 상수는 정의됩니다. 예를 들어 STDOUT_FILENO는 unistd.h 또는 stdlib.h에서 1로 정의됩니다.

사용자 터미널과 상호 작용하기 위해 이미 stdin 및 stdout을 사용하는 스크립트가 있다고 가정합니다. 그런 다음 stdin/stdout 스트림에 영향을 주지 않고 읽기, 쓰기 또는 두 가지 모두를 위해 다른 파일을 열 수 있습니다. 이것은 간단한 예입니다. 기본적으로 위의 tldp.org 링크와 동일한 유형의 자료입니다.

#!/bin/bash -
#open a file for reading, assign it FD 3
exec 3</path/to/input.file
#open another file for writing, assign it FD 4
exec 4>/path/to/output.file
#and a third, for reading and writing, with FD 6 (it's not recommended to use FD 5)
exec 6<>/path/to/inputoutput.file

#Now we can read stuff in from 3 places - FD 0 - stdin; FD 3; input.file and FD 6, inputoutput.file
# and write to 4 streams - stdout, FD 1, stderr, FD 2, output.file, FD 4 and inputoutput.file, FD 6

# search for "something" in file 3 and put the number found in file 4
grep -c "something" <&3 >&4

# count the number of times "thisword" is in file 6, and append that number to file 6
grep -c "thisword" <&6 >>&6

# redirect stderr to file 3 for rest of script
exec 2>>&3

#close the files
3<&-
4<&-
6<&-
# also - there was no use of cat in this example. I'm now a UUOC convert.

이제는 좀 더 이해가 되기를 바랍니다. 실제로 몰입하려면 시도해 보아야 합니다. POSIX 만트라를 기억하세요. 모든 것이 파일입니다. 따라서 사람들이 <가 실제로 파일에만 적용된다고 하면 Linux/Unix를 제한하는 문제가 아닙니다. 파일이 아닌 경우 파일처럼 보이고 작동하도록 쉽게 만들 수 있습니다.

답변2

이후 파일을 <이전 프로그램의 표준 입력으로 리디렉션합니다 <.

foo < bar

foo프로그램은 이 파일을 표준 입력으로 사용하여 실행됩니다 bar.

관련 정보