2010-10-02 29 views
5

Tôi có một ứng dụng chạy như một quá trình trên máy chủ ubuntu. Ứng dụng này có gui dòng lệnh cho phép tôi gõ lệnh, sau đó nhấn enter và lệnh chạy. Tôi có thể viết kịch bản xác định quá trình id. Sau đó tôi kịch bản sau đây để gửi một lệnh: Các biến thểgửi lệnh để xử lý bằng/proc

# echo "command" > /proc/<PROCESSID>/fd/0 

Tôi đã cố gắng của

# echo "command" > /proc/<PROCESSID>/fd/0 

# echo -e "command\r" > /proc/<PROCESSID>/fd/0 

# echo -e "command\c" > /proc/<PROCESSID>/fd/0 
# echo -e "\015" > /proc/<PROCESSID>/fd/0 

Tôi biết chương trình là nhận được lệnh nhưng không thực hiện nó. Tôi nghi ngờ điều này là bởi vì tôi không thể chất nhấn vào và có thể là dòng lệnh đang mong đợi điều này. Ai đó có thể tư vấn cho tôi về cách tôi đang sử dụng tùy chọn này không chính xác hoặc tốt hơn không?

+0

'Giao diện dòng lệnh'? Hoặc 'UI dòng lệnh'? Nếu bạn đang lái xe quá trình theo cách chính thống, bạn gõ gì vào bàn phím? Hay bạn cũng phải làm gì đó với con chuột? Làm thế nào để bạn biết rằng quá trình này đang nhận được lệnh? –

+0

Giao diện người dùng dòng lệnh tôi sẽ nghĩ là mô tả tốt nhất, không có tương tác chuột. Thông thường tôi chạy chương trình thông qua ssh và một dòng lệnh dựa trên văn bản xuất hiện. Trong giao diện này, tôi có thể gõ vào các lệnh và chúng được thực thi. Nếu tôi mở một giao diện ssh riêng biệt thứ hai, tôi có thể gõ echo "command">/proc//fd/0 sau khi xác định id tiến trình và nó xuất hiện trong giao diện ssh ban đầu nhưng không thực thi. – RandyMorris

+0

Câu hỏi liên quan: [Tiêm tổ hợp phím vào quá trình khác bằng Bash] (http://stackoverflow.com/a/11199135/929437) – aland

Trả lời

4

Bạn không thể làm điều đó./proc/fd/0 là (thường) không phải là đường ống mà bạn có thể viết và cung cấp cho đầu vào quy trình.

Những gì bạn cần làm, là gọi quá trình với stdin của nó đến từ cái gì đó là một đường ống (hoặc ổ cắm vv) để bạn có thể viết công cụ vào nó.

Một đường ống có tên CÓ THỂ làm việc ở đây (xem mknod (1) hoặc mkfifo (3)).

Nếu không, bạn sẽ cần chương trình điều khiển nằm phía trước nó và sử dụng một cặp ống để nói chuyện với nó.

+0

bạn đã đúng, tôi đã gửi văn bản đến giao diện, không phải là chương trình. Tôi sẽ cần phải làm như bạn khuyên và tạo ra một chương trình để hoạt động như một đường ống thích hợp. cảm ơn bạn. – RandyMorris

2

Mà không biết các chi tiết cụ thể, bạn có thể cần điều này: expect

+0

Tôi đã đọc một chút về điều này, có vẻ như đây là tùy chọn để sử dụng nếu bạn đang mong đợi lời nhắc nhất định mà bạn có thể phản hồi theo lập trình. Bạn vẫn sẽ đề xuất điều này nếu không có lời nhắc như vậy? Tôi cố gắng sử dụng tối thiểu và mã hóa rõ ràng nhất có thể nhưng nếu sử dụng thư viện khác là câu trả lời hay nhất, tôi sẽ biết ơn ... – RandyMorris

+0

Từ nhận xét của bạn về câu trả lời ở trên, có vẻ như bạn đang mong đợi một số loại lời nhắc: "và một dòng lệnh văn bản dựa trên xuất hiện " – ennuikiller

+0

điều này rất thú vị để đọc, cảm ơn bạn đã bình luận của bạn: D – RandyMorris

Các vấn đề liên quan