2016-01-24 101 views
1

我試圖從Linux上獲取在Windows機器上運行的進程列表,但是當我在腳本中執行此操作時,我沒有得到任何輸出。如果我手動使用telnet並使用pslist命令,我會得到完整的進程列表,但不會在我的腳本中。如何從bash獲取telnet命令的輸出?

這裏是bash腳本(減去的變量):

(echo open ${host} 
sleep 1 
echo ${user} 
sleep 3 
echo ${pass} 
sleep 1 
echo pslist 
sleep 2 
) | telnet 

,我只是用bash pslist.sh調用它,並且輸出是類似的東西:

telnet> Trying ip_address... 
Connected to ip_address. 
Escape character is '^]'. 
Welcome to Microsoft Telnet Service 

login: my_loginmy_passwordpslistConnection closed by foreign host. 

我在做什麼錯?

+1

嘗試終止每個'echo'與\ r字符,就像這樣:'回聲-e 「$ {}用戶\ r」 – nsilent22

+0

echo有許多可移植性問題,不應該與選項標誌一起使用。請考慮使用printf:'printf'name:%s \ n'「$ name」'。 http://wiki.bash-hackers.org/commands/builtin/echo | http://cfajohnson.com/shell/cus-faq.html#Q0b | http://www.in-ulm.de/~mascheck/various/echo+printf –

+0

我會建議使用'expect'來編寫telnet腳本。您可以在這裏瞭解並下載它:http://expect.sourceforge.net/有一個示例telnet腳本在此處使用它:http://stackoverflow.com/questions/7789710/expect-script-to-automate-telnet -login –

回答

2

終止每個echo與\ r字符,像這樣:echo -e "${user}\r"

+1

爲了便於攜帶,'printf'絕對優於'echo',帶或不帶'-e',並且有或沒有在一些方言中支持而在其他方言中不支持的轉義碼。使用'printf',所有這些都得到了正確的標準化。 – tripleee

3

telnet對腳本來說是非常棘手的。如果在命令之間添加更長的sleep,則可能會更經常地獲得成功。

更好的方法是切換到正確腳本的客戶端,即, netcat(又名nc)。更好的辦法是在你的Windows機器上安裝一個SSH服務器(或許爲了安全起見,只能從你的網絡中訪問它),並用無密碼驗證進行設置。然後,你可以簡單地ssh [email protected] pslist