6

リモートサーバーにコマンドを送信する必要があるアプリケーションに取り組んでいます。多数のSSHクライアントライブラリを使用すると、コマンドの送信は非常に簡単です。

ただし、各コマンド間でシェルの状態(つまり、現在の作業ディレクトリ、環境変数など)を保持したいと思います。私が見たすべてのクライアントライブラリはこれを行いません。たとえば、以下は私が望むことを行わないコードの例です:

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')はできません。

4

2 に答える 2

2

Net::SSH::Expectは、コマンドの出力を解析し、シェル プロンプトが再び表示されるタイミングを検出しようとするため、「Expect」の方法は完全に信頼できるわけではありませんが、必要なことを行います。

于 2011-07-21T08:33:35.397 に答える
0

あなたが何をしているのか正確にはわかりませんが、SSH セッションを 1 つだけ開始することができます。本当にこれができない場合は、すべてに絶対パスを使用できます。

于 2011-07-20T19:10:16.077 に答える