linux期望sudo脚本将命令和参数视为命令

时间:2017-06-20 05:25:10

标签: linux expect sudo

我想编写一个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

两者都有效

1 个答案:

答案 0 :(得分:2)

如果您使用的是Tcl版本&gt; = 8.5,那么您可以使用参数展开{*}

spawn /usr/bin/sudo {*}$argv

否则,

eval spawn /usr/bin/sudo $argv