Jestem wieloletnim „zaawansowanym użytkownikiem” systemu Windows i programistą, który niedawno zdecydował się przejść na system Mac OS X.
W OS X Lion i rzeczywiście w poprzednich wersjach wydają się istnieć dwie główne opcje skryptów i automatyzacji w OS X: AppleScript i Bash. To drugie jest oczywiście bezpośrednią konsekwencją OS X używającego uniksowej powłoki „bash”, podczas gdy ta druga jest własną innowacją Apple. Składnie są wyraźnie bardzo różne, a AppleScript ma styl pseudo-naturalny.
Moje pytanie brzmi: czy skrypty AppleScript i Bash są powszechnie używane (a nawet powinny być używane) do różnych zadań i celów w systemie OS X. Jestem niejasno świadomy szerokiego zakresu zadań, które mogę wykonać za pomocą skryptu Bash, choć oczywiście kod dla niektórych bardziej zaawansowanych mogą się szybko zawinąć. Czy te dwa języki mają nakładające się lub prawie identyczne przypadki użycia, pomimo późniejszego wynalezienia AppleScript przez AppleScript - czy też są przeznaczone do użycia w różnych scenariuszach? Doceniony zostanie przegląd ogólny, a także niektóre konkretne przykłady.
źródło
Odpowiedzi:
Zarówno shell, jak i AppleScripts mogą być używane niemal wszędzie, gdzie jest to właściwe.
Skrypty AppleScript działają lepiej podczas rozmowy z aplikacjami i urządzeniami systemowymi na poziomie użytkownika. (Na przykład możesz powiedzieć
tell app "iTunes" to play
i to zrobi lubtell app "Finder" to open the first file of the second window
.)Skrypty powłoki (mówiłeś o bash) działają lepiej, gdy rozmawiasz z obiektami systemowymi niskiego poziomu i uniksowymi rzeczami.
Oba są interoperacyjne: możesz wywołać polecenie powłoki z AppleScript za pomocą
do shell script "command here"
i możesz wywołać kod AppleScript z powłoki za pomocąosascript -e "AppleScript"
. Co więcej, oba elementy nakładają się na siebie (szczególnie jeśli chodzi o operacje systemu plików).Z pewnością jest więcej zasobów do nauki skryptów powłoki online niż AppleScript i nie pomaga to, że AppleScript ma reputację języka „tylko do odczytu” (tj. Trudniej pisać niż czytać).
W każdym razie najnowocześniejszym sposobem wykonywania skryptów jest Automator, w którym można używać powłoki Shell lub AppleScripting (lub obu) wraz z gotowymi modułami z różnych zainstalowanych aplikacji.
źródło
Chociaż oba konteksty skryptowe mogą zrobić wszystko, co inne (ponieważ skrypty powłoki mogą wywoływać w
/usr/bin/osascript
celu wywołania AppleScript, a AppleScript mado shell script
polecenie), istnieją jednak konteksty, dla których jeden jest bardziej odpowiedni niż drugi.Oba języki skryptowe są językami „kleju” - potrafią same robić minimalne czynności i zamiast tego realizują większość swoich zadań, przywołując możliwości innych programów. Skrypty powłoki używają potoków uniksowych, a AppleScript ma
tell application
składnię.Różnią się tym, że skrypty AppleScript komunikują się bezpośrednio z aplikacjami skryptowymi (prawie zawsze aplikacjami GUI), podczas gdy skrypty powłoki komunikują się przede wszystkim z programami wiersza poleceń (niektóre z nich mogą wywoływać graficzne interfejsy użytkownika, ale wiele nie.
Jeśli chodzi o zadania zarządzania plikami, oba podejścia mogą działać. Można
Tell Application Finder
skopiować pliki lub uruchomićcp
polecenie w skrypcie powłoki. Po co więc stosować jeden na drugim? Z pewnością niektórzy pisarze skryptów lepiej znają jeden język niż drugi i dlatego wolą korzystać z tego narzędzia. Ale lepiej wziąć pod uwagę użytkownika skryptu. AppleScript często można wywoływać z graficznego interfejsu użytkownika Maca: dwukrotne kliknięcie aplikacji AppleScript, upuszczenie plików na jeden lub użycie menu AppleScript w całym systemie lub w określonym programie. Programy takie jak Mail można skonfigurować tak, aby uruchamiały AppleScript na przychodzących wiadomościach w celu ich filtrowania. Dla użytkowników przyzwyczajonych do korzystania z komputerów Mac w sposób podobny do komputera Mac (tj. Z GUI), skrypty AppleScript są często bardziej dostępne.Skrypty powłoki często (ale nie zawsze) znajdują się w terminalu. Jeśli ktoś już korzysta z terminalu, uruchomienie skryptu powłoki może być wygodniejsze niż wywołanie AppleScript. Z drugiej strony wielu użytkowników jest zniechęconych koniecznością wpisywania poleceń w oknie terminala lub nawet kliknięciem pliku skryptu, który otwiera okno terminala, aby wykonać swoją magię. Osobiście uważam, że składnia skryptów powłoki jest bardziej czytelna niż w skryptach AppleScript, ale podejrzewam, że jestem w tej mniejszości. Skrypty powłoki są znane użytkownikom wielu różnych systemów uniksowych.
W każdym razie oba są potężnymi narzędziami do uzyskania lepszej kontroli nad komputerem Mac.
źródło
Tell Application Finder
aby skopiować pliki otworzy okno z widocznym paskiem postępu, acp
nie zrobi tego. Czy to prawda?Pozostałe odpowiedzi dają świetne ogólne omówienie intencji tych dwóch technik skryptowych. Może dam ci tylko przykłady tego, jak z nich korzystam.
W Applescript stworzyłem reguły przetwarzania poczty, podłączyłem BBEdit do R do przetwarzania statystycznego, utworzyłem złożone akcje folderów i przeprowadziłem masową reorganizację moich zdjęć w iPhoto i Aperture. Stworzyłem również mini-aplikacje z przyciskami i wyświetlaczami tekstowymi. Zasadniczo jest to automatyczna manipulacja złożonymi aplikacjami za pomocą GUI.
Za pomocą skryptów Bash stworzyłem procedury automatycznego przetwarzania obrazu za pomocą Imagemagick, procedury przetwarzania plików PDF za pomocą Ghostscript, procedury czasu i daty oraz mnóstwo przetwarzania tekstu za pomocą Bash, sed / awk i Perl. Narzędzia uniksowe wydają się być szczupłe, szybkie i elastyczne, a Bash to świetny sposób na połączenie ich w bardzo potężne, łatwe w użyciu narzędzia.
Czasami wywołuję skrypty Bash z poziomu Applescript, zwykle w celu przetwarzania tekstu (GREP) lub do lekkiego pobierania strony (curl). Prawie zawsze używam tej techniki, aby uzyskać trochę danych lub zmiennej do dalszego wykorzystania w moim Applescript.
źródło
Może to być nadmierne uproszczenie, ale skrypty powłoki służą do łączenia istniejących programów w celu wykonywania nowych zadań, podczas gdy AppleScript ma zdalne sterowanie aplikacjami (głównie GUI). Klasyczne programy uniksowe zwykle czytają niektóre dane wejściowe i wytwarzają dane wyjściowe, a skrypty powłoki pozwalają je łączyć. AppleScript ma zautomatyzować aplikacje GUI.
źródło