Bash에서 명령을 실행하는 방법

Bash에서 명령을 실행하는 방법

이것은 제가 항상 궁금했던 일반적인 질문이지만 간략히 설명하자면: bash는 스크립트나 터미널을 통해 주어진 명령을 어떻게 실행합니까?

나는 다음과 같이 모든 명령을 검사하는 여러 개의 if 문을 갖는 것이 가능할 것이라고 생각했습니다(의사 코드).

if (command == "pwd") pwd();
else if (command == "echo") echo();
...

그러나 이는 Firefox 또는 gedit와 같은 프로그램에 대해 실행되는 명령과 같이 새 명령이 추가될 때마다 코드를 다시 컴파일해야 하기 때문에 문제가 발생합니다.

그런 다음 이 명령이 기억났습니다. 이 which명령은 (말장난 의도 없이) 주어진 명령의 디렉터리를 가리키며, 이로 인해 bash가 파일을 찾고 iostream을 사용하여 파일을 실행한다고 가정하게 됩니다.

그렇습니까? 그렇다면 어떤 메서드를 호출할지 어떻게 알 수 있나요? 아니면 그냥 일반 실행 파일인가요?

답변1

명령이 존재하는 경우 내부적으로 작동하는 방법은 다음과 같습니다. 일반 일반 표준 입력을 사용하여 명령(스크립트에서 왔는지 여부에 관계없이)과 해당 인수를 저장한 다음 구문 분석하여 execve다음 과 같이 시스템 호출로 보냅니다. 그런 다음 시스템에서 명령을 실행합니다.

http://man7.org/linux/man-pages/man2/execve.2.html

또한 Time4Tea가 말했듯이 실행 중인 셸에 고유한 몇 가지 내장 명령이 있습니다. exit그 중 하나입니다.

 

경험상, 기존의 어떤 방법으로도 Linux에 대해 알아낼 수 없다면 소스 코드를 찾아보세요.

답변2

기본적으로 일부 명령은 bash 쉘 프로그램 자체에 내장되어 있습니다(예: echo, set). 이 경우 bash에는 명령줄에서 호출하는 사용자에 대한 응답으로 이러한 명령을 내부적으로 실행하기 위해 컴파일된 코드가 있습니다. man bash또는 의 매뉴얼을 보면 info bash"내장 기능" 목록이 있습니다.

내장 명령 중에 명령이 없으면 쉘은 $PATH 환경 변수에 나열된 디렉토리(나열된 순서대로)를 검색하여 거기에서 외부 명령을 찾을 수 있는지 확인합니다. 그렇지 않은 경우 명령을 찾을 수 없음 오류가 보고됩니다.

관련 정보