나는 튜토리얼을 따라가며 및 의 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
사용하지 않는 한 마지막 파일만 전달합니다.zsh
multios
$ 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
명령은 파일 이름을 알지 못합니다.