我正在开发一个需要向远程服务器发送命令的应用程序。使用大量SSH客户端库,发送命令非常简单。
但是,我希望在每个命令之间保留shell状态(即当前工作目录,环境变量等)。我见过的所有客户端库都没有这样做。例如,以下是不执行我想要的代码的示例:
use Net::SSH::Perl;
my $server = Net::SSH::Perl->new($host);
$server->login($user, $pass);
$server->cmd('cd /var');
$server->cmd('pwd'); # I _would like_ this to output /var
在发送命令之间会执行其他任务,因此不能接受像$server->cmd('cd /var; pwd')
这样的命令的组合。
答案 0 :(得分:2)
Net::SSH::Expect做你想要的,虽然“Expect”方式并不完全可靠,因为它将解析命令的输出并试图检测shell提示何时再次出现。
答案 1 :(得分:0)
我不确定你到底做了什么,但你可以开始一个SSH会话。如果你真的不能这样做,也许你可以只使用绝对路径。