我对这个期望的东西还有另外一个问题。我已经尝试了八种方式让星期天工作,似乎无法弄明白。基本上,我想要在期望的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\"
"
这很有效。
两个问题:
我确定这是一个愚蠢的问题,我遇到并需要在某处修理。
答案 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中执行步骤?无论如何,它奏效了。