Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell Expect脚本无法处理多个密码请求_Shell_Perl_Expect - Fatal编程技术网

Shell Expect脚本无法处理多个密码请求

Shell Expect脚本无法处理多个密码请求,shell,perl,expect,Shell,Perl,Expect,我试图执行一个perl脚本来连接linux主机,生成一个快照,然后我需要将这个快照SCP到本地服务器。因此,我必须输入密码2次,1次登录服务器,2次登录之前生成的文件。 问题是,我的expect脚本只适用于第一个密码,有人知道吗 [linuxserver dimm]$ ./mul.sh spawn perl perlscript.pl Cleaning up /tmp/logs Getting logs from server 9.x.x.x using snap Password: <

我试图执行一个perl脚本来连接linux主机,生成一个快照,然后我需要将这个快照SCP到本地服务器。因此,我必须输入密码2次,1次登录服务器,2次登录之前生成的文件。 问题是,我的expect脚本只适用于第一个密码,有人知道吗

[linuxserver dimm]$ ./mul.sh
spawn perl perlscript.pl
Cleaning up /tmp/logs
Getting logs from server 9.x.x.x using snap
Password:  <------ THIS ITERATION WORKS FINE WITH EXPECT
Password:  <------ THE 2nd ITERATION DOES NOT WORK AND I HAVE TO ADD THE PASSWORD MANUALLY
[linuxserver dimm]$

首先,在bash脚本中放入expect脚本时,使用引用的herdoc,这样可以显著减少引用

您似乎需要输入密码,然后等待perl程序结束:

  • 在同一expect命令中放置多个模式
  • 使用特殊的
    eof
    模式期望生成的程序结束

  • /usr/bin/expect您的缩进没有反映该缩进中单个
    expect
    语句的组织。请密切注意花括号和双引号。看看我的,你可以用它只写外壳代码的Expect脚本。完美的Glenn!!非常感谢你的帮助!!
        export PASSWORD='mypassword'
    
    /usr/bin/expect -c '
        spawn perl perlscript.pl
        expect {
            -nocase "*assword*" {
                send "$env(PASSWORD)\r"
                exp_continue
            }
    expect -c "
        expect "*assword*"
        send \$env(PASSWORD)\r
        interact"
        }
    
    interact
    '