2016-07-27 19 views
1
use Net::SSH2; 
my $ssh2 = Net::SSH2->new(); 
$ssh2->connect($hostname); 
$ssh2->auth_password($user,$pass); 
$chan = $ssh2->channel(); 
$chan->exec("cd dir1"); 
$chan->exec("command file1.txt"); 

上記は機能しません。commanddir1/file1.txtが見つかりません。 Net::SSH2を使用して作業ディレクトリをどのように変更しますか?Net :: SSH2を使って作業ディレクトリを変更するには?

+0

#$ chan-> exec( 'ls -la'); [ここから参照してください](http://www.perlmonks.org/?node_id=569657) – ssr1012

+0

@ ssr1012それはディレクトリを一覧表示します。私はそれをしたくありません。 – CJ7

+1

'$ chan-> exec(" ./ command ");' –

答えて

1

the documentationによると、$chan->exec()の各呼び出しは、リモートで独自のプロセスで実行されます。最初のexeccd dir1はその実行にのみ影響します。次のexecは完全に別のプロセスです。

コマンドでフルパスを渡すことであろう問題を解決する最も簡単な方法、すなわち

$chan->exec("command dir1/file1.txt"); 

また$chan->setenv()を使用してPATH変数を設定してみてくださいでしたが、それはおそらく、リモート側で禁止されます。 (processセクションから)も

に...リモートシェル(シェル使用して)を起動し、そのSTDINストリームにコマンドを印刷し、バックデータを読み出すユーザ対話をシミュレートすることも可能ですそのstdoutとstderrから。しかし、可能であれば、このアプローチは避けなければならない。シェルと話をすることは難しく、一般的には信頼できません。

関連する問題