2016-07-27 102 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。但如果可能的話應該避免這種方法;與殼交談是困難的,並且通常不可靠。