표준 입력(stdin)이 터미널인 경우도 있습니다.
$ tty
/dev/pts/0
때로는 그렇지 않습니다:
$ echo hello | tty
not a tty
$ tty < /dev/null
not a tty
$ tty << eof
> hello
> eof
not a tty
터미널이 아닌 경우 "stdin"은 무엇입니까? "tty가 아님" 그룹은 집합적인 이름을 가지고 있습니까, 아니면 개별적으로 참조됩니까?
답변1
파일(또는 장치 파일이나 FIFO) 또는 파이프일 수 있습니다.
일반 열린 파일보다 제어 터미널에서 작동하는 방법이 더 많기 때문에 구별이 중요합니다. 이것이 장점이 될 때도 있고, 단점이 될 때도 있습니다.
예를 들어 터미널을 리디렉션할 수 없습니다. stdin을 리디렉션할 수 있지만 이는 tty에서 읽는 데 영향을 미치지 않습니다. 프로그램은 종종 tty에서 비밀번호를 읽습니다. 이는 명령이 표준 입력에서 읽으려는 데이터를 방해하지 않기 때문에 좋을 수 있지만 명령을 스크립트하려는 경우(예를 들어 터미널을 처리해야 expect
하는 경우 ) socat
좋지 않을 수 있습니다 .
그러나 프로세스가 표준 입력에 연결되어 있지 않더라도 여전히 제어 tty가 있습니다.
답변2
사람들은리디렉션:
따라서 "tty가 아닙니다" 대신 "리디렉션입니다"라고 말할 수 있습니다. 파일을 다음 명령으로 리디렉션합니다.
command < filename
Here Documents - 이 유형의 리디렉션은 단어만 포함된 행(후행 공백 없이)이 나타날 때까지 현재 소스에서 입력을 읽도록 쉘에 지시합니다.
<<[-]word
here-document
delimiter
commandA의 stdout을 commandB로 리디렉션합니다.
commandA | commandB