Hai cửa sổ, cùng một người dùng, với lời nhắc bash. Trong loại cửa sổ-1:
$ mkfifo f; exec <f
Vì vậy, bash hiện đang cố đọc từ mô tả tệp 0, được ánh xạ tới ống có tên f
. Trong loại cửa sổ-2:
$ echo ls > f
Bây giờ window-1 in một ls và sau đó shell chết. Tại sao?
Thí nghiệm tiếp theo: mở cửa sổ-1 lần nữa với exec <f
. Trong loại cửa sổ-2:
$ exec 3>f
$ echo ls >&3
Sau dòng đầu tiên ở trên, window-1 thức dậy và in dấu nhắc. Tại sao? Sau dòng thứ hai ở trên, window-1 in ls
đầu ra và shell vẫn còn sống. Tại sao? Thực tế, bây giờ trong window-2, echo ls > f
không đóng shell window-1.
Câu trả lời phải có liên quan đến sự tồn tại của bộ mô tả tệp 3 từ cửa sổ-2 tham chiếu đường ống có tên?!
exec 3>f
được chạy, shell đầu tiên sẽ đưa ra lời nhắc. (Điểm nhỏ, ý bạn là "trong chế độ ghi " trong bình luận của bạn?)
exec <f
,bash
không cố đọc từf
đầu, trước tiên là cố gắng mở nó. Cácopen()
sẽ không trở lại cho đến khi có một số quá trình làm một nẻo mở trong chế độ ghi vào ống (lúc này đường ống sẽ được khởi tạo, và vỏ sẽ đọc thông tin từ nó).