2017-02-07 15 views
0

私たちが使用しているプロファイルを置き換え、古いプロファイルを削除するコマンドを実行する必要があります。プロファイル削除のMac OS Expectコマンド

/usr/bin/profiles -D 

それは、ユーザからの入力を要求し、「あなたは、すべての構成プロファイルを削除してもよろしいです[Y/N]:?」

私たちは、このプロセスを自動化しようとしている、とに見ていますexpectコマンドを実行するのに問題があります。

/usr/bin/expect -f - <<EOD 

spawn /usr/bin/profiles -D 

expect "Are you sure you want to delete all configuration profiles? [y/n]:" 
send "y\n" 
EOD 

私たちが試してみると、このエラーが発生します。

sudo /Users/gpmacarthur/Desktop/test.sh 
spawn /usr/bin/profiles -D 
invalid command name "y/n" 
    while executing 
"y/n" 
    invoked from within 
"expect "Are you sure you want to delete all configuration profiles? [y/n]:"" 

誰でも助けてください、本当にありがとうございます。

答えて

0

まずはここでexpectを使用する必要はありません。あなたは、次のフラグを使用することができます。

-f, auto confirm any questions

私はすでにexpect説明まで入力されたので、すなわち

/usr/bin/profiles -fD 

広場ブラジャーをcketsはコマンド置換として評価され、正規表現マッチでエスケープする必要があります。これを避けるには、{}表記を使用できます。

/usr/bin/expect -f - <<EOD 

spawn /usr/bin/profiles -D 

expect {Are you sure you want to delete all configuration profiles? \[y/n]:} 
send "y\n" 
EOD 
+0

なぜ '\ y \ r \ n" 'を送信するための\ r \ n? – pynexj

2
  1. Tclのは、Bashの$(...)のようなコマンド置換構文です。
  2. [...]は、グロブパターン(または正規表現)にも特別です。

    /usr/bin/expect -f - << 'QUOTED-EOD' 
    spawn /usr/bin/profiles -D 
    
    expect "Are you sure you want to delete all configuration profiles? \\\[y/n]:" 
    send "y\n" 
    
    expect eof; # This is required! 
    QUOTED-EOD 
    

    それとも、(バッシュの単一引用符'...'のように)Tclの{...}引用のスタイルを使用することができます:

だから、このように書くべき

expect {Are you sure you want to delete all configuration profiles? \[y/n]:}; # The `[' still needs to be escaped. 

それとも

expect {\[y/n]:} 
関連する問題