我必须在运行时传递路径,因为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
谢谢,
答案 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' $path
从script.exp
脚本调用perl
,假设使用chmod
等,大致就像DeVadder所说的那样。如果您的exec
脚本希望终止,请使用perl
。运行man perlfunc
以阅读有关perl命令的信息。