【发布时间】:2012-12-30 06:48:16
【问题描述】:
我对这个期望的东西还有另一个问题。我已经尝试了八种方法到星期天来让它工作,但似乎无法弄清楚。基本上,我想要么在期望生成过程中“调用脚本”,要么弄清楚如何调用 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\"
"
这很好用。
两个问题:
- 我可以在主脚本中调用那些networksetup cli吗?如果是这样,为什么调用这个“change.sh”脚本不起作用?
- 对于“install.sh”脚本,spawn 以 root 身份成功触发并且运行良好,它们看起来完全一样
我确定这是我遇到的一个愚蠢的问题,需要在某个地方解决一些问题。
【问题讨论】:
-
尝试指定脚本的完整路径:
spawn su root -c {/bin/bash /path/to/change.sh} -
不,那没有这样做..
标签: macos bash shell automation expect