【问题标题】:linux expect sudo script treat command and argument as a commandlinux期望sudo脚本将命令和参数视为命令
【发布时间】:2017-06-20 14:49:16
【问题描述】:

我想编写一个期望脚本来执行带有参数的命令,我使用 $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 ,就会出现一些错误:

spawn /usr/bin/sudo crontab -l
[sudo] password for jadd: 
sudo: crontab -l: command not found

我应该怎么做才能使脚本将 crontab -l 视为整个命令?

----------------------------------------------- ------------------

更新答案: 该脚本在 centos 6.5 x64 和 tcl 版本 8.5.7 上运行 正如 Dinesh 回答的那样:

eval spawn  /usr/bin/sudo $argv

或

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

两者都有效

【问题讨论】:

  • 这可能是 linux.stackexchange.com 的问题。

标签: linux expect sudo


【解决方案1】:

如果您使用的是Tcl 版本>= 8.5,那么您可以使用参数扩展{*}。

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

否则,

eval spawn /usr/bin/sudo $argv

【讨论】:

  • “神奇”在于$argv 是一个列表,因此您将列表作为单个参数传递给sudo。您需要将 argv 列表的 每个元素 作为单独的参数传递给 sudo。 {*} 这样做,eval 也这样做
猜你喜欢
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多