"cat"은 내장 쉘인가요, 아니면 외부 프로그램인가요?

"cat"은 내장 쉘인가요, 아니면 외부 프로그램인가요?

쉘 내장 프로그램인지 외부 프로그램인지 type확인하기 위해 명령 을 사용하면 다음과 같은 출력이 표시됩니다.cat

-$ type cat
cat is hashed (/bin/cat)
-$

이것이 cat외부 프로그램이라는 뜻입니까 /bin/cat?

아래 출력을 확인해보니 프로그램인 동시에 프로그램 echo인 것을 확인하기 때문에 혼란스럽습니다.built-in/bin/echo

-$ type echo
echo is a shell builtin
-$ which echo
/bin/echo
-$ 

/bin/cat/bin/echo따라서 echo가 여전히 내장되어 있으므로 반드시 외부 프로그램을 의미하는 논리를 사용할 수 없습니다 .

cat그러면 그것이 무엇인지 어떻게 알 수 있나요 ? 내부 또는 외부?

답변1

type쉘이 무엇을 사용할지 알려줍니다. 예를 들어:

$ type echo
echo is a shell builtin
$ type /bin/echo
/bin/echo is /bin/echo

이는 bash 프롬프트에 입력하면 echo내장된 항목을 얻게 된다는 의미입니다. 와 같이 경로를 지정하면 /bin/echo외부 명령을 받게 됩니다.

which대조적으로, 외부 프로그램은 쉘이 수행할 작업에 대한 특별한 지식이 없습니다. 데비안 계열 시스템에는 whichPATH에서 실행 파일을 검색하는 쉘 스크립트가 있습니다. 따라서 쉘이 내장 실행 파일을 사용하더라도 외부 실행 파일의 이름을 제공합니다.

명령이 내장 명령으로만 사용 가능한 경우 which아무것도 반환되지 않습니다.

$ type help
help is a shell builtin
$ which help
$ 

이제 살펴보겠습니다 cat.

$ type cat
cat is hashed (/bin/cat)
$ which cat
/bin/cat

cat내장 쉘이 아닌 외부 실행 파일입니다.

답변2

cat is hashed (/bin/cat)마치 cat is /bin/cat(즉,외부 프로그램입니다).

차이점은 cat이 세션에서 이미 실행 중이므로 bash가 이미 해시 테이블에서 결과 위치를 조회 $PATH하고 저장했기 때문에 이 세션에서 다시 조회할 필요가 없다는 것입니다.

세션에서 해시된 모든 명령을 보려면 다음을 실행하세요.hash

$ hash
hits    command
   2    /usr/bin/sleep
   3    /usr/bin/man

$ type sleep
sleep is hashed (/usr/bin/sleep)

$ type man
man is hashed (/usr/bin/man)

$ type ls
ls is /usr/bin/ls

$ type cat
cat is /usr/bin/cat

$ type echo
echo is a shell builtin

답변3

쉘의 내장 목록을 확인하는 또 다른 방법:compgen이것은 쉘에 내장되어 있습니다!

다음 명령은 모든 셸 내장 명령을 나열합니다.

compgen -b

다음과 같이 grep으로 확인할 수 있습니다 cat. echo-

$ compgen -b | grep echo
echo
$ compgen -b | grep cat
$ 

compgen -b | grep cat출력이 반환되지 않음 을 알 수 있습니다 .cat쉘에 내장되어 있지 않음.

입장제공되는 유용한 옵션 목록입니다 compgen.


다른 내장 명령을 사용할 수도 있습니다.help쉘 내장을 표시합니다.

$ help help
help: help [-dms] [pattern ...]
    Display information about builtin commands.

답변4

이미 다른 분들이 답변해주셨는데 cat, 간단히 질문만 설명하겠습니다 echo. -a유형(일치하는 모든 항목 나열) 옵션을 사용하면 다음과 같은 echo내용이 표시 됩니다.둘 다내장 쉘그리고외부 프로그램:

$ type -a echo
echo is a shell builtin
echo is /bin/echo

둘은 완전히 독립적입니다. type옵션이 없으면 발견된 첫 번째 일치 명령만 반환됩니다. 따라서 type 은 foorun 경우 실행될 내용을 표시합니다 foo. 다른 옵션이 있을 수도 있지만 해당 옵션을 사용하지 않으면 표시되지 않습니다 -a.

관련 정보