bash 프롬프트가있는 동일한 사용자의 두 창 창 1에서 다음을 입력하십시오.
$ mkfifo f; exec <f
따라서 bash는 이제 파일 디스크립터 0에서 이름을 가진 pipe에 맵핑하려고합니다 f
. 창 2에서 다음을 입력하십시오.
$ echo ls > f
이제 window-1은 ls를 인쇄하고 쉘은 죽습니다. 왜?
다음 실험 :로 window-1을 다시 엽니 다 exec <f
. 창 2에서 다음을 입력하십시오.
$ exec 3>f
$ echo ls >&3
위의 첫 번째 줄 이후에, window-1이 깨어나고 프롬프트를 인쇄합니다. 왜? 위의 두 번째 줄 이후에 window-1은 ls
출력을 인쇄 하고 쉘은 활성 상태를 유지합니다. 왜? 실제로, 이제는 window-2 echo ls > f
에서 window-1 쉘을 닫지 않습니다.
대답은 명명 된 파이프를 참조하는 창 2의 파일 설명자 3 의 존재 와 관련이 있어야합니까 ?!
exec 3>f
실행되면 첫 번째 쉘이 프롬프트를 표시하는 이유 입니다. (사소한 점, 귀하의 의견에서 " 쓰기 모드" 를 의미 했 습니까?)
exec <f
,bash
시도되지 않은 읽기 에서f
, 처음 시도하는 열 을. 는open()
파이프에 기록 모드로 다른 오픈 (되는 파이프가 인스턴스화 될 가리키고 쉘이 입력을 판독한다)하고 어떤 프로세스가있을 때까지 복귀하지 않을 것이다.