我想编写一个expect脚本来执行带参数的命令,我使用$ argv作为命令和参数来生成,但不幸的是,似乎期望将整个命令和参数视为命令。例如,代码如下:
#!/usr/bin/expect --
set psw 123456
set timeout 360
spawn /usr/bin/sudo $argv
expect {
"*password*" {send "$psw\n"; exp_continue;}
timeout { exec kill -9 [exp_pid]; close; }
}
如果我执行 expect sudo.ext crontab -l </ em>,则会出现一些错误:
spawn /usr/bin/sudo crontab -l
[sudo] password for jadd:
sudo: crontab -l: command not found
我该怎么做才能使脚本将 crontab -l </ em>视为整个命令?
更新答案: 该脚本运行在centos 6.5 x64和tcl 8.5.7版本上 所以Dinesh回答说:
eval spawn /usr/bin/sudo $argv
或
spawn /usr/bin/sudo {*}$argv
两者都有效
答案 0 :(得分:2)
如果您使用的是Tcl
版本&gt; = 8.5,那么您可以使用参数展开{*}
。
spawn /usr/bin/sudo {*}$argv
否则,
eval spawn /usr/bin/sudo $argv