如何在linux expect脚本中传递参数表单perl?

时间:2014-01-28 15:14:54

标签: linux perl shell expect

我必须在运行时传递路径,因为abc.sh脚本会提示它。我正在尝试使用expect脚本来完成此操作,

#!/usr/bin/expect -f
set force_conservative 0  
if {$force_conservative} {
    set send_slow {1 .1}
    proc send {ignore arg} {
        sleep .1
        exp_send -s -- $arg
    }
}
spawn abc.sh
match_max 100000
expect -exact "Please enter path : "
send -- $path
expect -exact "\r
expect eof

需要你的帮助 - 如何在运行时调用这样的$ path值?

expect script.exp $path 

谢谢,

1 个答案:

答案 0 :(得分:1)

期待答案

send -- $argv脚本中使用expect,因为$argv包含命令行参数。

作为一个例子,当管理员愚蠢地禁用公钥认证时,我有这个方便的期望脚本与ssh命令交互:

#!/usr/bin/expect -f
set timeout -1
set send_human {.6 .1 1.6 .1}
eval spawn $argv
match_max 100000
expect {
   -re "LOGIN@(\[0-9A-Za-z_\\-\\.\]+)'s password: "
    { sleep 0.6 ; send -- "PASSWORD" ; sleep 0.1 }
interact

如果只需要部分[lrange $argv 0 $argc]

,请使用$argv等结构

Perl回答

使用system 'script.exp' $pathscript.exp脚本调用perl,假设使用chmod等,大致就像DeVadder所说的那样。如果您的exec脚本希望终止,请使用perl。运行man perlfunc以阅读有关perl命令的信息。