Bash는 명령줄을 어떻게 처리하나요?

Bash는 명령줄을 어떻게 처리하나요?

~에서Newham의 Bash 쉘 배우기:

쉘이 표준 입력 또는 스크립트에서 읽는 각 행은 파이프라고 하며 0개 이상의 파이프 문자(|)로 구분된 하나 이상의 명령을 포함합니다. 읽는 각 파이프에 대해,쉘은 그것을 명령으로 나눕니다., 파이프라인의 I/O를 설정한 다음 실행합니다.각 명령은 다음과 같습니다(그림 7-1):

  1. 명령을 고정된 메타 문자 집합(SPACE, TAB, NEWLINE, ;, (,), <, >,)으로 구분된 토큰으로 분할합니다.|, 그리고&. 토큰 유형에는 단어, 키워드, I/O 리디렉터 및 세미콜론이 포함됩니다.
  1. 쉘이 파이프를 로 구분된 명령으로 나눈 후에도 ||여전히 각 명령의 토큰을 구분하는 메타 문자로 나열합니까? |모든 명령에 나타날 수 있나요 ?

  2. Bash 매뉴얼에는 bash 셸이 파이프라인을 실행할 때 파이프라인의 각 명령을 실행하기 위해 하위 셸을 분기한다고 나와 있습니다.

    파이프라인의 각 명령에 대해 "각 명령에 대해 다음을 수행하는" 셸은 무엇입니까? 해당 명령에 대해 분기된 하위 셸입니까, 아니면 원래 셸입니까?

답변1

  • 파이프 문자는 |따옴표가 없는 단어를 끝내기 때문에 메타 문자입니다. 이는 쉘 언어를 이해하기 쉽게 만드는 데 필요합니다.

  • 쉘이 파이프에 대한 다양한 프로세스를 생성하는 방식은 표준화되지 않았으며 구현마다 다릅니다.

Bourne Shell은 처음에 하나를 생성한 sub-shell다음 파이프라인의 모든 프로세스에 대한 상위 프로세스가 되고 결국 파이프라인에서 가장 오른쪽 프로그램을 시작합니다. 이 방법은 다른 방법보다 코드가 덜 필요하며 작업 제어를 간단하게 구현할 수 있습니다.

Bash도 비슷한 방식으로 작동합니다.

Ksh93은 파이프라인의 각 프로세스를 원래 셸의 직접적인 하위 프로세스로 만듭니다.

관련 정보