2013-01-16 59 views
0

工作時我還有另一個與這個期望的東西有關的問題。我已經嘗試了八種方法來讓星期天工作,而且似乎無法解決這個問題。基本上,我想在預期的產卵過程中「調用腳本」,或者想出如何調用sudo,然後以提升的提示運行一組Mac CLI命令。期望spawn調用的腳本沒有運行,當相同的命令通過終端

下面是命令我要運行(他們需要以管理員身份運行):

#!/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 

This Works。但是,它在期望腳本中不起作用。

我還有另外一個劇本,叫「install.sh」,這正常工作與上面下面的代碼:

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

這完美的作品。

兩個問題:

  1. 我可以只調用主腳本中那些networksetup CLI的?如果是這樣,爲什麼不調用這個「change.sh」腳本工作?
  2. 對於「install.sh」腳本,產卵成功觸發的根和偉大工程,他們看起來像是完全一樣的東西

我敢肯定,這是我遇到和需要的傻問題修理某些地方的東西。

+0

嘗試指定腳本的完整路徑:'spawn su root -c {/ bin/bash /path/to/change.sh}' –

+0

nope,那沒有做到。 –

回答

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中的步驟?無論如何,它的工作。

+0

其實,我是WRONG 。所有的交互操作都是在超時時間內添加更多的BIT時間。如果我將超時設置爲比默認值更高的值,腳本就會運行並且我們都很好。 –

+0

你也可以使用'sleep 10',例如,其中10是秒數 – TryTryAgain

+0

我意識到這個評論晚了約2年,但是......:期望在它存在之前發送一個SIGHUP給底層衍生的進程。如果這些腳本應該超出期望腳本,您可能希望在expect腳本的span行中使用'spawn -ignore SIGHUP ...'來避免殺死衍生的子進程。 HTH。 – arielf

相關問題