当相同的命令通过终端工作时,期望spawn调用的脚本没有运行

时间:2013-01-16 01:40:13

标签: macos bash shell automation expect

我对这个期望的东西还有另外一个问题。我已经尝试了八种方式让星期天工作,似乎无法弄明白。基本上,我想要在期望的spawn过程中“调用脚本”,或者想出如何调用sudo然后运行一组Mac CLI命令作为提升的提示。

以下是我想要运行的命令(它们需要以管理员身份运行):

#!/bin/bash

networksetup -setdnsservers "Ethernet" 172.xxx.xxx.xxx;
networksetup -setsearchdomains "Ethernet" "congo.test";

我将此文件命名为“change.sh”

基本上,我想在运行我现在正在使用的主安装脚本之前先设置一些网络接口。

这是我所拥有的似乎不起作用的东西,但是,当它直接在命令行上调用时它可以找到:

expect -c "
set password \"foobar\"
spawn su root -c \"/bin/bash change.sh\"
expect \"Password:\"
send \"\$password\r\"
"

现在,我知道我可以传入一个argv,我很可能会为最后一次运行,但这不起作用,它实际上似乎从来没有激活脚本并运行网络更改。如果我跑:

%> su root -c ./change.sh

这很有效。但是,它不适用于期望脚本。

我有另一个名为“install.sh”的脚本,这可以正常使用上面的代码:

spawn su root -c \"/bin/bash install.sh\"
expect \"Password:\"
send \"\$password\r\"
"

这很有效。

两个问题:

  1. 我可以在主脚本中调用那些networksetup cli吗?如果是这样,为什么不调用这个“change.sh”脚本呢?
  2. 对于“install.sh”脚本,spawn以root身份成功触发并且运行良好,它们看起来完全相同
  3. 我确定这是一个愚蠢的问题,我遇到并需要在某处修理。

1 个答案:

答案 0 :(得分:1)

奇怪的是,这很有效:

#!/bin/bash

cd /Users/wqcoleman/Desktop/

expect -c "
set password \"william1\"
spawn su root -c \"/bin/bash /Users/wqcoleman/Desktop/change.sh\"
expect \"Password:\"
send \"\$password\r\"
interact
"

在片段结尾处进行交互。不知道为什么?也许有人可以为我解答这个问题,但明显的互动与“时机”有关吗?或者也许是在change.sh中执行步骤?无论如何,它奏效了。