Perl 如何以编程方式获取有状态ssh外壳会话?
我正在开发一个需要向远程服务器发送命令的应用程序。使用过多的SSH客户端库发送命令非常简单 但是,我希望在每个命令之间保留shell状态(即当前工作目录、环境变量等)。我见过的所有客户端库都不这样做。例如,下面是一个代码示例,它不做我想做的事情:Perl 如何以编程方式获取有状态ssh外壳会话?,perl,ssh,openssh,Perl,Ssh,Openssh,我正在开发一个需要向远程服务器发送命令的应用程序。使用过多的SSH客户端库发送命令非常简单 但是,我希望在每个命令之间保留shell状态(即当前工作目录、环境变量等)。我见过的所有客户端库都不这样做。例如,下面是一个代码示例,它不做我想做的事情: use Net::SSH::Perl; my $server = Net::SSH::Perl->new($host); $server->login($user, $pass); $server->cmd('cd /var');
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')
这样的命令是不可接受的。我不确定您到底在做什么,但您可以只启动一个SSH会话。如果你真的做不到这一点,也许你可以对所有事情使用绝对路径。做你想做的,尽管“Expect”way并不完全可靠,因为它将解析命令的输出,并尝试检测shell提示符何时再次出现。只要您只运行知道如何解析输出的命令就可以了。@Joshua:嗯,我后来发现Net::SSH::Expect没有使用任何逻辑来确定命令何时完成。它只是有一个(可定制的)超时,并假设该命令在超时结束时完成。完全不可靠!EWW。那么你最好直接在expect中写下这该死的东西。