1
此前,我使用Tk/Expect和plink(PuTTY)來自動執行遠程shell操作。但是,如果不同的shell有不同的提示,或者提示字符出現在非提示shell輸出(!)中,Expect有時會失敗。如何判斷遠程tty是否在等待輸入?
我想知道是否有辦法確定遠程shell是否在等待輸入通過plink或一些第三方庫。如果有必要,我可以在套接字層編程。
此前,我使用Tk/Expect和plink(PuTTY)來自動執行遠程shell操作。但是,如果不同的shell有不同的提示,或者提示字符出現在非提示shell輸出(!)中,Expect有時會失敗。如何判斷遠程tty是否在等待輸入?
我想知道是否有辦法確定遠程shell是否在等待輸入通過plink或一些第三方庫。如果有必要,我可以在套接字層編程。
不,沒有辦法可靠地檢測到你正在工作的級別的shell提示符。一些替代方案可能是:
doSomething ; echo uniqueStringThatMeansThatWeAreDone
- 然後搜索該字符串。exec
即可。使用一個可以直接執行命令的SSH庫,而不是試圖編寫一個shell腳本。我不熟悉什麼是Tcl中可用,但Perl有Net::SSH::Perl
,這將讓你做這樣的事情:
my $ssh = Net::SSH::Perl->new("remotehost");
$ssh->login("user", "pass");
my $output = $ssh->cmd("doSomething");
謝謝您的回答。我將研究如何實現Net :: SSH :: Perl,而不是重新發明輪子,但這是我感興趣的知識。 –
您可能不想嘗試重新創建Net :: SSH :: Perl你自己 - 這是一個在Perl中完成SSH客戶端的完整實現。不容易。 :) – duskwuff
將提示設置爲新的UUID;在另一邊偶然出現的可能性是可笑的微乎其微。 –