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
更改工作目录?
答案 0 :(得分:1)
根据the documentation,$chan->exec()
的每次调用都在其自己的进程中运行在远程上。第一个cd dir1
中的exec
仅影响该执行。下一个exec
是一个完全独立的过程。
解决问题的最简单方法是传递命令中的完整路径,即
$chan->exec("command dir1/file1.txt");
您也可以尝试使用$chan->setenv()
设置PATH变量,但这可能会被远程端禁止。
另请注意(来自process
部分):
...还可以启动远程shell(使用shell)并模拟用户交互打印命令到其stdin流并从stdout和stderr读回数据。但是如果可能的话应该避免这种方法;与壳说话很困难,而且一般来说都不可靠。