Perl scipt:使用Expect模块生成bash命令时出现意外令牌的语法错误

ar777

我正在编写perl脚本以将目录复制到远程计算机。我正在使用Expect模块来期望密码并发送密码。

但是出现如下语法错误

sh:-c:第0行:意外令牌系统附近的语法错误(scp -r / home / user1 / data / 192.168.0.1:/tmp/)'scp'
sh: -c: line 0:

perl脚本是:

use Expect;  
$Expect::Debug=2;

$cmd="scp -r /home/user1/data/ 192.168.0.1:/tmp/";

my $exp1=Expect-> spawn("system($cmd)") or die print "cannot spwan process\n";


$exp1-> expect(10,["[email protected]'s password: "=>sub{ $exp1-> send("usr1234\r");}]);

先感谢您

DeVadder

我不完全确定您的脚本出了什么问题(spawn(system($cmd))当然是execpt ,但是已经在注释中解决了。也许=>不需要了吗?或者您需要用\n而不是密码结尾\r吗?无论如何,这很简单我使用了以下类似的方法,效果很好(请注意,这$rsync是我的Expect对象)。

    $rsync=Expect->spawn ("rsync $remUser\@$remIp:$remFiles $locFolder");

    if (! defined($rsync))
    {
        die "spawning failed. Probably fork failed: $!";
    }

    my $matchStatus = $rsync->expect(100, '-re', '(.+)');

    if (! defined $matchStatus)
    {
        die "Nothing got returned within 100 seconds. $!";
    }

    my $spawned = 0;
    while ($spawned eq 0)
    {
        my $return = $rsync->match();

        if ($return =~ m/command not found/)
        {
            die "Command not found, there appears to be no rsync... $!";
        }
        elsif ($return =~ m/RSA key fingerprint is/)
        {
            $rsync->send ("yes\n");
            sleep(5);
        }
        elsif ($return =~ m/password/)
        {
            $rsync->send($password,"\n");
            $spawned = 1;
        }
        else 
        {
            print "rsync answered:\n\n";
            print "$return \n";
            print "I did not expect that. EXIT\n";
            exit(1);
        }
    }

print "Sent Pw...\n";

这样可以处理更多不同的答案,并且可以更轻松地对其进行修改和调试。但是显然要长得多。我更喜欢露骨而不是优雅。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Perl - 使用打印功能时出现意外结果

捆绑错误:语法错误使用React-native-android-wifi时出现意外令牌

语法错误:使用renderToString(<RoutingContext {... renderProps} />时出现意外令牌<

Angularjs Flickr API语法错误:使用nojsoncallback = 1时出现意外令牌

PERL语法错误在“ =”附近

Perl继承语法错误

反应语法错误:在 = 处出现意外令牌

Perl脚本引发awk命令的语法错误

命令行上的Perl哈希语法错误

Vue-loader语法错误:从js文件导入组件时出现意外令牌{

安装Yara时出现意外令牌附近的语法错误

Perl在if语句中获取语法错误

Perl语法错误是否在for循环附近?

Bash:完成时出现意外标记“<”附近的语法错误

使用Perl执行Python脚本时,为什么没有语法错误?

Bash选项卡补全:'-bash:寻找匹配`)时出现意外的EOF -bash:语法错误:文件意外结束

当我运行以“#!/ usr / bin / perl -w”开头的文件时,出现错误:“第153行“ =〜?”附近的语法错误”

安装perl模块Bio :: Perl时出现问题

使用Perl库而不是Perl中的模块

Perl:使用模块@list

使用 fgrep 在 makefile 中出现意外的 perl 正则表达式替换输出

从ajax调用函数时出现“语法错误:意外的令牌”

perl sftp模块安装时出现的问题

Perl 5:在声明的包中使用SWIG生成的模块时,名称空间出现问题

perl 脚本中的 awk 命令出现错误

语法错误:node.js中出现意外的令牌非法

语法错误:反应项目中出现意外令牌

带有 React Hooks 的 If 语句中出现意外的令牌语法错误

Perl模块替代wget命令