쉘 내장 프로그램인지 외부 프로그램인지 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
대조적으로, 외부 프로그램은 쉘이 수행할 작업에 대한 특별한 지식이 없습니다. 데비안 계열 시스템에는 which
PATH에서 실행 파일을 검색하는 쉘 스크립트가 있습니다. 따라서 쉘이 내장 실행 파일을 사용하더라도 외부 실행 파일의 이름을 제공합니다.
명령이 내장 명령으로만 사용 가능한 경우 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 은 foo
run 경우 실행될 내용을 표시합니다 foo
. 다른 옵션이 있을 수도 있지만 해당 옵션을 사용하지 않으면 표시되지 않습니다 -a
.