일부 명령이 입력 리디렉션을 사용하지 않는 이유는 무엇입니까?
짧은 대답 : 그들은 프로그래밍되지 않았기 때문입니다.
읽을 프로그램 stdin
(이후에 지정된 파일에 쉘이 연결하는 스트림 <
)은 자동이 아닙니다. 프로그래머가 코딩해야합니다. 이 문제를 해결하기 위해 명령 줄에 지정된 파일을 읽는 것도 자동이 아닙니다. 즉, 경로 재 지정 또는 이름으로 지정된 파일의 내용은 추가 코딩없이 프로그램 변수 내에 마술처럼 나타나지 않습니다.
프로그램이 스트림에서 읽도록 코딩되지 않은 경우 리디렉션을 넣었는지 여부는 중요하지 않으며 단순히 읽지 않습니다. POSIX 사양 ( http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html )에 echo
따라 읽을 필요는 없으며 stdin
명령 줄 인수 (및 일부 환경 변수) 만 검사합니다. 다른 프로그램을 찾으려면 소스 코드, 설명서를 읽거나 간단히 말해서 시도해보십시오.
마지막 질문에 대답하려면 명령이 대화식이라고 말할 수는 없습니다. 읽고있는 입력 스트림이 터미널 (예 : 일반 파일)과 연결되어 있는지 여부 를 확인할 수 있습니다 . http://rosettacode.org/wiki/Check_input_device_is_a_terminal 에 여러 언어로 된 예제가 있습니다 . 이 기능을 사용하여 대화식으로 사용되는지 (키보드 명령을 사용하여 메일을 읽는지) 또는 비 대화식으로 (예 : 파일에서 메일 메시지를 읽는지) 판별하는 메일 링 프로그램을 생각할 수 있습니다. 잘 모르겠습니다 mail
. ( mail
명령 줄 인수를 사용하거나 사용하지 않고 호출 할 때 다르게 동작합니다!)
dd
다음 으로 리디렉션 할 수 있습니다 .dd status=none < /proc/uptime