쉘이 표준 입력 또는 스크립트에서 읽는 각 행은 파이프라고 하며 0개 이상의 파이프 문자(|)로 구분된 하나 이상의 명령을 포함합니다. 읽는 각 파이프에 대해,쉘은 그것을 명령으로 나눕니다., 파이프라인의 I/O를 설정한 다음 실행합니다.각 명령은 다음과 같습니다(그림 7-1):
- 명령을 고정된 메타 문자 집합(SPACE, TAB, NEWLINE, ;, (,), <, >,)으로 구분된 토큰으로 분할합니다.|, 그리고&. 토큰 유형에는 단어, 키워드, I/O 리디렉터 및 세미콜론이 포함됩니다.
쉘이 파이프를 로 구분된 명령으로 나눈 후에도
|
왜|
여전히 각 명령의 토큰을 구분하는 메타 문자로 나열합니까?|
모든 명령에 나타날 수 있나요 ?Bash 매뉴얼에는 bash 셸이 파이프라인을 실행할 때 파이프라인의 각 명령을 실행하기 위해 하위 셸을 분기한다고 나와 있습니다.
파이프라인의 각 명령에 대해 "각 명령에 대해 다음을 수행하는" 셸은 무엇입니까? 해당 명령에 대해 분기된 하위 셸입니까, 아니면 원래 셸입니까?
답변1
파이프 문자는
|
따옴표가 없는 단어를 끝내기 때문에 메타 문자입니다. 이는 쉘 언어를 이해하기 쉽게 만드는 데 필요합니다.쉘이 파이프에 대한 다양한 프로세스를 생성하는 방식은 표준화되지 않았으며 구현마다 다릅니다.
Bourne Shell은 처음에 하나를 생성한 sub-shell
다음 파이프라인의 모든 프로세스에 대한 상위 프로세스가 되고 결국 파이프라인에서 가장 오른쪽 프로그램을 시작합니다. 이 방법은 다른 방법보다 코드가 덜 필요하며 작업 제어를 간단하게 구현할 수 있습니다.
Bash도 비슷한 방식으로 작동합니다.
Ksh93은 파이프라인의 각 프로세스를 원래 셸의 직접적인 하위 프로세스로 만듭니다.