2012-05-10 43 views
2

預計,每次產卵命令,我寫了本地主機上使用ssh命令,模擬終端的腳本。因此考慮下面的場景,我有一個使用期望模塊perl腳本(說script.pl),以及有這種類型的如何推出新的終端使用Expect Perl模式的perl

$ssh = Expect->spawn("ssh -Y $loginname\@$systemname") 

所以這裏的問題是...我使用的是終端的兩個命令執行script.pl,我的代碼有兩個spawn命令。我注意到在用於執行script.pl的終端內啓動了兩個spawn命令。但我想要兩個新的終端用於兩個生成命令。所以這裏應該有三個用於script.pl的終端,其中兩個用於script.pl中的每個spawn命令。

是否有實現從單一的Perl腳本使用預計兩個新的終端的任何方式?

回答

1

「有沒有用期待實現從單一的Perl腳本兩個新的終端的任何方式?」

當然。但終端是一樣的應用程序。你必須明確地調用它;所有你產卵的是ssh。終端應用程序是異構的,所以您需要弄清楚系統上運行着哪些終端應用程序,以及如何在啓動時啓動應用程序。例如,對於Xfce終端如下:

$ssh = Expect->spawn("Terminal -e \"ssh -Y $loginname\@$systemname\""); 

應該工作。或者可能更好:

$ssh = Expect->spawn("Terminal", ("-e", "ssh -Y $loginname\@$systemname")); 

但是,您的終端可能不是Xfce終端。如果你在Windows上,我相信它是cmd。在Linux上,它取決於安裝的內容;如果您使用的是默認的發行將是與DE附帶的終端 - gnome-terminal爲GNOME,konsole爲KDE等

它可能會更有意義,但是,如果自動啓動終端一些其他的方式並讓他們在啓動時使用expect/ssh執行腳本。

+1

終端不會從SSH轉發輸出/輸入由期望處理的僞TTY,所以這是大多無用。 – salva

+0

是的,但這應該是顯而易見的 - 我對Expect並不熟悉,它是否需要這樣做?我想,如果在命令完成時用命令調用大多數終端將會返回。但是如果OP想要自動化一個命令,這樣你就可以看到它在一個產生的終端中發生,可能這樣做是不可能的。但是,您可以啓動終端-e「運行Expect的腳本」) – delicateLatticeworkFever

+0

Expect用於自動執行需要用戶交互的任務,例如,可能會將密碼傳遞給ssh。否則,它是沒有意義的使用期望在所有的,一個可以只運行'系統(「終端」,「-e」,$ ssh_cmd)' – salva