2016-07-27 66 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"); 

以上不起作用而command找不到dir1/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()的每个调用都在远程的自身进程中运行。第一个exec中的cd dir1仅影响该执行。下一个exec是一个完全独立的过程。

要解决的问题是通过在命令的完整路径,最简单的方法,即

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

你也可以尝试设置使用$chan->setenv() PATH变量但可能会通过远程端被禁止。

还要注意(从process部分):

...,也可以启动一个远程外壳(使用壳)和模拟用户交互打印命令到它的标准输入流和读取数据返回从它的stdout和stderr。但如果可能的话应该避免这种方法;与壳交谈是困难的,并且通常不可靠。