2017-02-07 1 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는 명령 대체로 평가되며 regex 일치에서 이스케이프해야합니다. 이 문제를 방지하려면 {} 표기법을 사용할 수 있습니다.

/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

왜 '보내시겠습니까'\ r \ n "? – pynexj

2
  1. Tcl의 은 Bash의 $(...)과 같은 명령 대체 구문입니다.
  2. [...]은 glob 패턴 (또는 정규식)에도 특수합니다.

    /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]:}