"고양이"와 "고양이<"의 차이점

"고양이"와 "고양이<"의 차이점

나는 튜토리얼을 따라가며 및 의 cat myfile.txt사용법을 보았습니다 cat < myfile.txt. 이 두 명령 시퀀스 사이에 차이점이 있습니까? 둘 다 파일 내용을 쉘에 인쇄하는 것 같습니다.

답변1

첫 번째 경우에는 cat파일이 열리고, 두 번째 경우에는 쉘이 파일을 열고 cat이를 표준 입력으로 전달합니다.

기술적으로는 서로 다른 효과가 있을 수 있습니다. 예를 들어, cat프로그램보다 더 많은(또는 더 적은) 권한을 갖는 쉘 구현이 있을 수 있습니다 . 이 경우 한 사람은 파일을 열 수 있지만 다른 사람은 파일을 열 수 없습니다.

이는 일반적인 경우는 아니지만 쉘과 cat동일한 프로그램이 아니라는 점을 지적하기 위해 언급됩니다.

답변2

테스트 사례와 큰 차이가 없습니다. 가장 분명한 것은 myfile.txt지정된 파일이 현재 디렉터리에 존재하지 않거나 해당 파일을 읽을 수 없는 경우 오류 메시지가 표시된다는 것입니다.

전자의 경우 cat불평할 것입니다. 후자의 경우 쉘은 어떤 프로세스가 파일을 열려고 하는지 명확하게 표시합니다. cat전자의 경우 후자의 경우 쉘이 명확하게 표시됩니다.

$ cat myfile.txt
cat: myfile.txt: No such file or directory
$ cat < myfile.txt
ksh93: myfile.txt: cannot open [No such file or directory]

보다 일반적인 경우 한 가지 주요 차이점은 리디렉션을 사용하여 여러 파일의 내용을 인쇄하는 데 사용할 수 없다는 것입니다 cat.고양이에네이트) 명령. 쉘은 어쨌든 리디렉션 입력으로 전달된 모든 파일을 열려고 시도하지만 실제로는 "zshism" 을 cat사용하지 않는 한 마지막 파일만 전달합니다.zshmultios

$ echo one > one
$ echo two > two
$ cat one two # cat opens one, shows one, opens two, shows two
one
two
$ cat < one < two # sh opens one then opens two, cat shows stdin (two)
two
$ rm one two
$ echo one > one
$ cat one two # cat opens and shows one, fails to open two
one
cat: two: No such file or directory
$ cat < one < two # the shell opens one then opens two, fails and 
                  # displays an error message, cat gets nothing on stdin
                  # so shows nothing
ksh93: two: cannot open [No such file or directory]

표준 시스템에서는 cat셸 액세스 권한과 파일 액세스 권한 간에 차이가 없으므로 둘 다 성공하거나 실패합니다. Thomas Dickey의 답변과 첨부된 의견에서 이미 알 수 있듯이 sudo높은 cat권한을 사용하면 행동에 큰 영향을 미칩니다.

답변3

cat myfile.txt파일을 읽고 myfile.txt표준 출력으로 인쇄합니다.

cat < myfile.txt여기에는 cat열 파일이 제공되지 않으므로 많은 Unix 명령과 마찬가지로 데이터는 표준 입력에서 읽혀지며, file.txt여기서 데이터는 셸에 의해 지시되고 표준 출력으로 인쇄됩니다.

답변4

다른 명령을 사용하여 차이점을 확인할 수 있습니다.

wc –w food2.txt

가능한 출력:

6 food2.txt

이 명령은 알고 있는 대로 파일 이름을 알려줍니다(인수로 전달됨).

wc –w < food2.txt

가능한 출력:

6

표준 입력은 파일로 경로 재지정되며 food2.txt명령은 파일 이름을 알지 못합니다.

관련 정보