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/