Bạn đã thử à?
Xem sự khác biệt giữa
echo 'ls' | sh -s
và
( echo 'ls'; cat ) | sh -s
hoặc là,
{ echo 'ls'; cat; } | sh -s
Tại đây, sh -s
sẽ bắt đầu một phiên shell đọc các lệnh để thực thi từ đầu vào tiêu chuẩn ( -s
).
Trong ví dụ đầu tiên, shell sẽ chỉ thực hiện ls
và thoát (vì không có thêm đầu vào).
Trong ví dụ thứ hai và thứ ba, shell sẽ thực thi ls
và sau đó đợi cho đến khi không còn đầu vào nào nữa. Luồng đầu vào sh -s
được tạo ra đầu tiên bởi echo
lệnh, nhưng sau đó cat
đảm nhận vai trò này. Các cat
quá trình sẽ đọc từ phiên vỏ phụ huynh và vượt qua các lệnh thông qua các đường ống để sh -s
. Nếu bạn gõ ls
, hoặc bất kỳ lệnh nào khác (sẽ không có dấu nhắc nhập vào), shell sẽ thực thi các lệnh đó.
Điều này sẽ tiếp tục cho đến khi bạn chấm dứt cat
quá trình bằng cách nhấn Ctrl+Dvào một dòng trống để báo hiệu kết thúc đầu vào.
Tôi tin rằng đó là những gì bạn có nghĩa là "giữ cho đường ống mở".