1

我对这个期望的东西还有另一个问题。我已经尝试了八种方法到星期天来让它工作,但似乎无法弄清楚。基本上,我想要么在期望生成过程中“调用脚本”,要么弄清楚如何调用 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 身份成功触发并且效果很好,它们看起来完全一样

我确定这是我遇到的一个愚蠢的问题,需要在某个地方解决一些问题。

4

1 回答 1

2

奇怪的是,这有效:

#!/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 中的步骤的执行?无论如何,它奏效了。

于 2013-01-16T19:50:28.773 回答