Jak używać przycisku Anuluj w Osascript, aby zatrzymać uruchamianie skryptu

2

Oto mój podstawowy skrypt:

#!/bin/bash

osascript  -e 'tell application id "com.apple.systemevents"'
-e 'display dialog "Do you want to continue?" & return & return &
 " Please wait..." buttons {"Cancel", "Okay"} default button
2 cancel button "Cancel"' -e 'end tell' -e 'if button returned is "Cancel" then'
-e '<blah blah kill this script>' -e 'end if'

-- other bash stuff here

Potrzebuję zatrzymać skrypt, jeśli użytkownik kliknie przycisk „Anuluj”. W tej chwili skrypt czeka, aż użytkownik kliknie którykolwiek z przycisków, a następnie uruchomi kod bash. Jak mogę zabić skrypt?

Można to uruchomić w systemie Mac OS od 10.6 do 10.10, bez dodatków innych firm.

rogerFernand
źródło

Odpowiedzi:

2

Co powiesz na to?

  • Działa na moim MacBooku 10.6.
  • To jest czystsze niż konieczność ucieczki cytatów itp ...
  • osascript zwraca status jak normalne programy uniksowe.
  • Skrypt Bash przerywa status 1z osascript.
  • Brak niepotrzebnych wiadomości z osascript - >dev/null 2>&1

Nie mam nic innego do przetestowania. Konieczne może być dostosowanie do innych wersji OSX.

#!/bin/bash

osascript >/dev/null 2>&1 <<-EOF
tell application id "com.apple.systemevents"
   set myMsg to "Do you want to continue?" & return & return & " Please wait..."
   set theResp to display dialog myMsg buttons {"Cancel", "Okay"} default button 2 
end tell

# Following is not really necessary. Cancel returns 1 and OK 0 ...
if button returned of theResp is "Cancel" then
   return 1
end if
EOF

# Check status of osascript
if [ "$?" != "0" ] ; then
   echo "User aborted. Exiting..."
   exit 1
fi

#-- other bash stuff here
echo "All good, moving on...."

HTH

Vic
źródło
Dzięki. Próbowałem dołączyć osascript do EOF przedtem i w mojej sytuacji to nie działa. Jakoś nie wykona bashowej części skryptu tylko applecript, dlatego użyłem osascript -e. Skrypt jest częścią aplikacji opakowanej w Wineskin. Skrypt jest wykonywany za pomocą jednego z elementów menu Pomoc.
rogerFernand
Skończyło się na dodaniu `|| wyjście 0`, co robi dokładnie to, czego potrzebuję, ale nie rozumiem dlaczego. W przeciwnym razie sam odpowiem na to pytanie. Osoba, która mi o tym opowiedziała, nie wyjaśniłaby mi tego. Może jakiś geniusz tutaj może nas oświecić. :)
rogerFernand
Jak korzystanie z EOF nie działa dla Ciebie? Wystąpił błąd? Jeśli chodzi o twój || exit 0, jest to logiczny operator OR używany jako krótka wersja if ... thenbloku. Jeśli twój osascript zwraca 0, to nie wykonuje drugiej części, jeśli nie, to musi wykonać drugą część.
Vic
Okno dialogowe się dzieje, ale naciśnięcie dowolnego przycisku nie ma wpływu na pozostały skrypt. To tak, jakby skrypt się skończył. Nie wiem, jak odczytać echo, więc nie wiem, jaki może być błąd, jeśli wyprowadza jeden, dokąd wyprowadza?
rogerFernand