2017-10-26 8 views
3

그래서 판독이 관로 후 실행되는 서브 쉘을 생성 -하지만 파이프 후이므로, STR의 내용은 현재에 상위 쉘이 읽을 수없는 하위 쉘. 내 질문은 무엇입니까 str의 내용은 어떻게됩니까? 쉘 이외의 곳에서 거주하거나 STR의 내용을 수행 - 내용이 STR로 읽어되면 파이프가 다음 서브 쉘을 작성하고 있는가, 부모 프로세스가 자식 프로세스를 종료 않으며 STR이 삭제됩니다. 서브 쉘에 무엇이 있는지 어떻게 알 수 있습니까? 부모 셸에서 하위 셸에 액세스 할 수 있습니까?배시 - 파이프 에코의 출력 <em>STR</em>에 읽히는 것을 의미

echo hello | read str 
echo $str 
+0

나는 이것을 유닉스를 배우는 누군가 개인적으로 흥미로운 질문으로 생각했다. –

답변

3

예에서 $str은 서브 쉘 안에 있고 기본적으로 줄이 끝나면 사라집니다. 하위 프로세스는 상위 프로세스를 수정할 수 없습니다.

셸 옵션 lastpipe을 변경하는 것 이외에도 파이프를 사용하지 않도록 코드를 변경할 수도 있습니다.

read str < <(your command) 
# or 
str=$(your command) 

이 두 너무 서브 쉘을 만들 수 있지만 $str는 부모 프로세스에 할당됩니다 :이 경우, 당신은 사용할 수 있습니다.

6

${str}의 값은 서브 쉘의 수명 동안 만 존재합니다.

배시 4.x에는 ksh93과 같이 부모 쉘에서 파이프 라인의 마지막 명령을 실행하는 옵션 shopt -s lastpipe이 기본적으로 있습니다. $str의 값이 유지됩니다.