bash에서 실행할 수 있는 모든 명령은 실제로 bash가 아닌가요? 나는 셸과 그 안에서 실행될 수 있는 응용 프로그램을 혼동해 왔다는 것을 깨달았습니다.
답변1
셸과 애플리케이션 사이에는 명확한 경계가 없습니다.
셸에서 실행되는 일부 명령은 셸 프로세스에서 작동하므로 셸에 내장되어야 합니다. 예를 들어, cd
쉘의 작업 디렉토리를 변경하는 것은 외부에서 수행할 수 없으므로 cd
내장 명령이어야 합니다. 그러나 이것은 구현 세부 사항입니다. 일반 사용자는 cd
이것이 내장 명령이 되도록 하는 기술적인 이유가 있다는 것을 알 필요가 없습니다 .
다른 극단에는 다양한 작성자가 만든 Firefox 또는 Emacs와 같은 대규모 애플리케이션이 있습니다. 너무 크기 때문에 어떤 쉘에도 내장되지 않습니다. 하지만 불가능한 것은 아닙니다. 단지 디자인의 문제일 뿐입니다. 예를 들어, 간단한 GUI 애플리케이션을 생성하기 위한 기능이 내장된 셸이 있습니다.
중간에 임의로 실행할 수 있는 명령도 있습니다. 예를 들어, 이 echo
명령은 셸에 내장될 필요는 없지만 거의 모든 셸이 내장되어 있으며 매우 작고 자주 사용되므로 효율적입니다. 또 다른 예는 kill
일상적인 사용의 경우 외부 명령일 수 있지만 내장 명령을 사용하면 여러 가지 장점이 있다는 것입니다. 프로세스 수 제한에 도달하더라도 호출할 수 있고 셸 작업을 제공할 수 있습니다. kill %2
프로세스 ID 대신 숫자( )를 사용하세요. [ … ]
구문( 로도 쓸 수 있음 ) 도 test
원칙적으로는 외부 명령일 수 있지만 같은 이유로 셸에 내장될 수 있습니다 echo
.
궁금하다면 명령을 사용하여 주어진 명령의 상태를 확인할 수 있습니다 type
. 예를 들어 내 설정에서는 다음과 같습니다.
% type while type setenv cp emacs
while is a reserved word
type is a shell builtin
setenv is a shell function
cp is an alias for cp -i
emacs is /usr/bin/emacs
예약어(예: while
and)는 then
셸 구문의 일부입니다. 내장 명령은 셸에 내장된 명령이며 외부 실행 파일이 필요하지 않습니다. 함수는 이름으로 호출할 수 있는 사용자 정의 및 명명된 복합 명령입니다. 별칭은 더 긴 명령에 대한 사용자 정의 짧은 이름입니다(함수와 다르게 동작함). 마지막 예는 외부 명령입니다.
^ 디텍스. 무료 구현은 없습니다.
답변2
bash 명령을 사용해 보십시오 type
. type
명령이 무엇인지 설명하십시오. 쉘 내장 명령인 경우, 별칭인 경우, 다른 프로그램인 경우...
예:
[braga@coleman ~]$ type echo
echo is a shell builtin
[braga@coleman ~]$ type ls
ls is aliased to `ls --color=auto'
[braga@coleman ~]$ type usermod
usermod is /usr/sbin/usermod
일부는 내장되어 있고 일부는 내장되어 있지 않습니다. type
특정 명령을 쿼리하려면 를 사용하세요. bash
모든 내장 함수 목록은 설명서를 참조하세요 .
- 내장이란 무엇입니까?
내장 명령은 셸 자체에 포함되어 있습니다. 내장된 명령의 이름이 간단한 명령의 첫 번째 단어로 사용되면 쉘은 다른 프로그램을 호출하지 않고 직접 명령을 실행합니다.
- 별칭이란 무엇입니까?
별칭을 사용하면 간단한 명령의 첫 번째 단어로 사용될 때 단어를 문자열로 바꿀 수 있습니다. 쉘은 alias 및 unalias 내장 명령을 사용하여 설정 및 설정 해제할 수 있는 별칭 목록을 유지 관리합니다.
두 인용문 모두 출처는 다음과 같습니다.배쉬 매뉴얼.
답변3
- 대부분의 명령은 셸의 일부가 아닙니다. (쉘은 해당 이름의 바이너리만 실행합니다.)
- 쉘 머신CD스크립트 언어 키워드(while, for 등)입니다.
- 다음과 같은 명령에코그리고시험쉘에서 구현될 수도 있고 구현되지 않을 수도 있습니다.