1

この期待値にはさらに別の問題があります。これを機能させるために日曜日に8つの方法を試しましたが、理解できないようです。基本的に、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

これは機能します。ただし、expect スクリプトでは機能しません。

「install.sh」という別のスクリプトがあり、これは上記の次のコードで正常に機能します。

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

これは完全に機能します。

2 つの質問:

  1. メイン スクリプト内でこれらの networksetup cli を呼び出すことはできますか? もしそうなら、なぜこの「change.sh」スクリプトを呼び出さないのでしょうか?
  2. 「install.sh」スクリプトの場合、スポーンはルートとして正常に起動し、うまく機能します。それらは完全に同じもののように見えます

私が遭遇しているのはばかげた問題であり、どこかで何かを修正する必要があると確信しています。

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 に答える