我正在研究需要將命令發送到遠程服務器的應用程序。大量的SSH客戶端庫發送命令很簡單。如何以編程方式獲得有狀態的ssh shell會話?
但是,我想在每個命令之間保留shell狀態(即當前工作目錄,環境變量等)。我見過的所有客戶端庫都不這樣做。例如,以下是代碼,不會不做我想做的一個例子:
use Net::SSH::Perl;
my $server = Net::SSH::Perl->new($host);
$server->login($user, $pass);
$server->cmd('cd /var');
$server->cmd('pwd'); # I _would like_ this to output /var
會有發送命令之間進行,所以相結合的命令,如$server->cmd('cd /var; pwd')
其他任務是不能接受的。
只要你只運行你知道如何解析輸出的命令就好了。 – Joshua
@Joshua:好吧,我後來發現Net :: SSH :: Expect沒有使用任何邏輯來確定命令何時完成。它只有一個(可定製的)超時時間,並假定當超時結束時命令完成。完全不可靠! – salva
EWWW。那麼你可能會做得很好,然後直接寫出期望值。 – Joshua