2010-10-02 130 views
5

我有一個應用程序作爲一個進程在Ubuntu服務器上運行。這個應用程序有一個命令行gui,它允許我鍵入一個命令,然後按回車鍵,命令運行。我能夠編寫進程ID的確定腳本。然後我腳本中的以下向它發送一個命令:的發送命令進程使用/ proc

# 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 

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

我曾嘗試變化,我知道程序是獲得命令,但不執行它。我懷疑這是因爲我沒有實際按下輸入,可能命令行也在期待這一點。有人能告訴我我如何使用這個不正確或更好的選項嗎?

+0

'命令行GUI'?或'命令行用戶界面'?如果你以正統的方式駕駛這個過程,你在鍵盤上輸入什麼?或者你也必須用鼠標做點什麼嗎?你怎麼知道這個過程正在得到命令? – 2010-10-02 13:59:07

+0

命令行界面我認爲最好描述它,沒有鼠標交互。通常我通過ssh運行程序,並出現一個基於文本的命令行。在這個界面中,我可以輸入命令並執行它們。如果我打開第二個單獨的ssh接口,在確定進程ID後,我可以在回顯「command」>/proc//fd/0中輸入它,並且它出現在原始ssh接口中但不執行。 – RandyMorris 2010-10-02 14:02:59

+0

相關問題:[注入擊鍵到不同的進程使用Bash](http://stackoverflow.com/a/11199135/929437) – aland 2013-11-15 20:55:18

回答

4

你不能做到這一點。/proc/fd/0(通常)不是您可以寫入並輸入過程輸入的管道。

你需要做的是使用來自某個管道(或套接字等)的stdin來調用該進程,以便可以將東西寫入其中。

命名管道可以在這裏工作(請參閱mknod(1)或mkfifo(3))。

否則,您需要一個位於其前方的控制程序,並使用一對管道與之通話。

+0

你是對的,我正在發送文本到界面,而不是程序。我需要按照您的建議去做,並創建一個程序來充當適當的管道。謝謝。 – RandyMorris 2010-10-24 00:48:53

2

不知道具體情況,你可能需要這樣:expect

+0

我已閱讀了一點,這似乎是這個選項使用,如果你期待您可以通過編程方式回覆的某些提示。如果沒有這樣的提示,你還會建議嗎?我嘗試儘可能使用最小和乾淨的編碼,但如果使用另一個庫是最好的答案,我會感激地接受... – RandyMorris 2010-10-02 14:16:26

+0

從您對上述答案的評論看來,您似乎期待某種提示:「和一個基於文本的命令行出現「 – ennuikiller 2010-10-02 14:23:38

+0

這是非常有趣的閱讀,謝謝你的評論:D – RandyMorris 2010-10-24 00:49:30