먼저, 대화식 쉘에 대한 명령의 일부로 입력 된 cat
경우에도 반드시 터미널이 아닌 표준 출력에 기록합니다 cat
. 표준 출력이 리디렉션 될 때에도 실제로 터미널에 쓸 무언가가 필요한 경우 그렇게 쉽지 않습니다 (어떤 터미널을 지정해야하며 명령이 스크립트에서 실행되는 경우 터미널이 없을 수도 있음). 명령이 파이프 라인의 일부인 경우 표준 오류 출력을 사용할 수 있습니다. 그러나 cat
실제로 작업을 수행한다고 표시했기 때문에 그러한 상황에 대해 묻지 않았다고 가정합니다.
당신의 목적은 파이프 라인으로 표준 출력에 기록됩니다 무엇을 전송한다면, 다음 사용하여 cat
받는 자격이 될 것 고양이 상 쓸모 사용 하기 때문에, cat file | pipeline
(여기서 pipeline
어떤 파이프 라인의 약자)를보다 효율적으로 수행 할 수 있습니다 <file pipeline
. 그러나 다시 말하지만, 나는 이것이 당신의 의도가 아니라고 추론합니다.
그래서 당신이 무엇을 걱정하는지 명확하지 않습니다. 당신이 찾아내는 경우에 cat
입력하는 데 시간이 너무 오래, 당신은 (표준 유닉스에서 사용되지 않는 남아있는 몇 등의 이름이 여전히있다)는 1 또는 2 문자 별칭을 정의 할 수 있습니다. 그러나 그것이 cat
쓸모없는 사이클을 소비 하고 있다고 걱정한다면 , 그렇게해서는 안됩니다.
null
인수를 사용하지 않고 표준 입력을 표준 출력 (파이프 라인의 중립 객체)에 복사 하는 프로그램 이 있다면 원하는 작업을 수행 할 수 있습니다 <file null
. 작성하기는 쉽지만 (한 줄 main
함수 만있는 C 프로그램 이 작업을 수행 할 수는 있지만) 그러한 프로그램은 없지만 cat
인수없이 (또는 cat -
명시 적으로 표현하려는 경우) 호출 하면됩니다.
이 있다면 nocat
단 하나 개의 파일 이름 인수를 취하는 프로그램을 할 수없는 경우를 불평, 파일을 열려고 시도하고, 그렇지 않으면, 그 다음은 당신이 요구하는 단지 어떤 것이 표준 출력에 파일 복사로 진행한다. null
, 파일을 열고 테스트하고 불만을 제기하는 주요 작업 보다 쓰기가 약간 어렵습니다 . 그러나 cat
이제는 단일 인수가 제공되므로 다시 수행 할 필요가 없으므로 nocat
프로그램이 필요하지 않습니다 .
nocat
프로그램 작성에 성공하면 왜 단일 논쟁에서 멈출까요? 코드를 루프로 감싸는 for(;*argp!=NULL;++argp)
것은 전혀 노력할 필요가 없으며 바이너리에 최대 두 개의 기계 명령어를 추가하며 잘못된 수의 인수에 대해 불평하지 않아도됩니다 (더 많은 명령어가 필요함). cat
파일을 연결 하는 기본 버전의 Voilà . (솔직히 말해서 인수없이 작동하도록 약간 조정해야합니다 null
.)
물론 실제 cat
프로그램에서 그들은 항상하기 때문에 몇 가지 종소리와 휘파람을 추가했습니다. 그러나 본질적인 점은 cat
비용 의 "연결"측면 이 전혀 노력을 기울이지 않고 프로그래머 나 기계를 실행하는 데 전혀 도움이되지 않는다는 것입니다. 그러한 프로그램이 존재하지 cat
않는다고 가정 null
하고 nocat
설명하는 사실 . cat
결과가 파이프 라인에 들어가는 경우 단일 인수를 사용하지 말고 터미널에 파일 내용을 표시하는 데만 사용되는 경우 링크 된 페이지조차도 이것이 유용한 사용법이라는 것을 인정 cat
하므로 주저하지 마십시오.
첫 번째 위치가 아닌 하나의 유효하지 않은 이름을 가진 여러 파일 이름 을 호출 cat
하여 가상 nocat
기능을 둘러싼 간단한 루프로 실제로 구현되는지 테스트 할 수 있습니다 cat
.이 파일이 존재하지 않는다고 즉시 불만을 제기하지 않고 cat
먼저 선행 파일을 덤프합니다. 유효한 파일을 찾은 다음 잘못된 파일에 대해 불평합니다 (적어도 내 고양이의 행동 방식).