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 -ssẽ 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 lsvà thoát (vì không có thêm đầu vào).
Trong ví dụ thứ hai và thứ ba, shell sẽ thực thi lsvà 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 echolệnh, nhưng sau đó catđảm nhận vai trò này. Các catquá 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 catquá 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ở".