Đường ống dữ liệu đến stdin của quá trình mà không gây ra EOF sau đó


33

Tôi có một thực thi bắt đầu một vỏ tương tác người dùng. Tôi muốn, khi khởi chạy shell, tiêm một vài lệnh trước, sau đó cho phép người dùng có phiên tương tác của họ. Tôi có thể làm điều này một cách dễ dàng bằng cách sử dụng echo:

echo "command 1\ncommand 2\ncommand3" | ./shell_executable

Điều này gần như hoạt động. Vấn đề là lệnh echo đang cung cấp stdin của tiến trình chạm vào EOF sau khi hoàn thành việc lặp lại các lệnh của tôi. EOF này khiến trình bao chấm dứt ngay lập tức (như thể bạn đã nhấn Ctrl + D trong trình bao).

Có cách nào để tiêm các lệnh này vào stdin mà không gây ra EOF sau đó không?


Bạn đã thử thêm ./shell_executablevào cuối danh sách các lệnh chưa? Điều đó có thể giúp nó tiếp tục, mặc dù bạn sẽ có hai phiên bản đang chạy (cha mẹ và con).
goldilocks

Câu trả lời:


40

Tìm thấy câu trả lời thông minh này trong một câu hỏi tương tự tại stackoverflow

(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable

Đây là mẹo. catsẽ bơm đầu ra echovào luồng đầu vào của shell_executable và chờ thêm đầu vào cho đến khi EOF.


@ jw013 Bạn nói đúng. Tôi đã chỉnh sửa bài viết. Cảm ơn. Khi tôi thử nghiệm với các dấu ngoặc đơn, tôi đã thấy cmd 1viết lại nhưng không nhận ra rằng đó phải là o / p được tạo bởicmd 1
Gowtham

CÔNG TRÌNH NÀY TUYỆT VỜI! Bạn chỉ tiết kiệm cho tôi một tấn thời gian. Cảm ơn bạn!!
jaggedsoft

22

Cách sạch để làm điều này có lẽ là để tìm kiếm một cái gì đó như bash's --rcfilelựa chọn. Đặt các lệnh tùy chỉnh của bạn trong tệp tùy chỉnh của bạn và chuyển nó vào trình vỏ tương tác để chạy khi khởi động.

Nếu không có tùy chọn như vậy tồn tại, bạn cũng có thể thử như sau:

cat custom_commands_file - | ./shell_executable

catsẽ diễn giải -như stdin.


giải pháp rất tốt
dctremblay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.