존재하지 않는 파일을 열 때 다른 오류가 발생합니다.


22

다음 명령은 모두 존재하지 않는 파일을 열려고 foo하지만 오류 메시지는 약간 다릅니다. 이유가 무엇입니까?

$ cat foo
cat: cannot open foo
$ cat < foo
-bash: foo: No such file or directory

12
여러분, 특히 새로운 이민자가 올린 글의 경우에만 형식에 따라 글을 게시하지 마십시오. 여기, 매우 유효한 질문입니다.
Stéphane Chazelas

21
cat < food대신 해야합니다cat < foo
Tulains Córdova

6
@ TulainsCórdova 또는 일부 문화, food < cat)
DepressedDaniel


1
첫 번째 오류 만에서 발생 cat합니다. 이제 두 번째 메시지가 어디에서 시작되는지 궁금합니다 bash:.
Dmitry Grigoryev

답변:


30
cat foo

cat인수와 함께 명령을 실행합니다 foo. 화면에 인쇄되는 오류는 전적으로 명령 프로그래머가 결정한 내용에 따라 다릅니다.

cat < foo 

이 파일의 내용을 공급 foo받는 cat사용하여 명령을 배쉬 표준 입력 리디렉션을 . 파일이 존재하지 않으면 Bash가 불평합니다.


20

에서는 $ cat foo쉘 (여기서는 떠들썩한 파티)을 실행 cat명령 및 매개 변수를 전달한다 foo. cat 프로그램은 해당 매개 변수를 파일 이름으로 해석하도록 선택하고 파일을 열려고 시도합니다. 당신이 보는 오류는 자연스럽게 파일을 열 수없는 고양이 프로그램에서 발생합니다.

버전 $ cat < foo은 쉘이 처리하는 리디렉션입니다. <쉘이 파일을 열고 stdin으로 리디렉션하도록 지시하는 쉘 연산자입니다. 파일이 없으므로 "No such file"이 표시됩니다. 이번에는 오류가 셸 (bash)에서 발생하고 약간 다르게 보입니다.

이것이 두 가지 다른 오류가 나타나는 이유입니다. 원인은 동일하지만 두 개의 다른 프로그램 (cat 및 bash)에서 나옵니다.


18
in cat < foocat리디렉션이 실패하면 호출되지 않습니다. 그 (그리고 일관된 오류 메시지)는 가능한 경우 리디렉션을 사용하는 것이 더 좋은 이유 중 하나입니다. 또한 존재하지 않는 경우 전자 가 재정의 되지 않는 cat < in > outvs를 고려하십시오 (셸은 실패한 리디렉션 직후 명령을 취소하고 invoke를 제외 하고 다음 리디렉션을 수행하지 않음 ). cat in > outoutin< in> outcat
Stéphane Chazelas

시원한! 순수한 논리. 난센스를 편집하겠습니다.
클로스 안데르센
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.