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 更改工作目录?

最佳答案

根据the documentation的说法,$chan->exec()的每次调用都在其自己的远程进程中运行。第一个cd dir1中的exec仅影响该执行。下一个exec是一个完全独立的过程。

解决问题的最简单方法是在命令中传递完整路径,即

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

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

另请注意(来自process部分):

关于perl - 如何使用Net::SSH2更改工作目录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38604737/

10-10 13:23