Wykonywanie skryptów powłoki ze stacji dokującej OS X?

160

Jak skonfigurować skrypt powłoki do wykonywania ze stacji dokującej Mac OSX? Wygląda na to, że samo utworzenie skrótu spowoduje otwarcie pliku w moim edytorze. Czy jest flaga, którą muszę gdzieś ustawić, aby nakazać jej uruchomienie zamiast otwierania do edycji?

Wilco
źródło
2
powinienem dawać +1 wyłącznie awatarowi, chociaż ten temat też mi się podoba.
Matt Bannert
Możesz rozważyć zmianę zaakceptowanych odpowiedzi na drugą @Wilco. Myślę, że to lepsza odpowiedź.
Gray

Odpowiedzi:

190

Możesz utworzyć przepływ pracy Automatora w jednym kroku - „Uruchom skrypt powłoki”

Następnie File > Save Aszmień Format pliku na „Aplikacja”. Po otwarciu aplikacji uruchomi ona krok skryptu powłoki, wykonując polecenie i kończąc pracę po jego zakończeniu.

Zaletą tego jest to, że to naprawdę proste i można bardzo łatwo uzyskać dane wejściowe użytkownika (powiedzmy, wybierając kilka plików), a następnie przekazać je na wejście skryptu powłoki (na stdin lub jako argumenty).

(Automator jest w twoim /Applicationsfolderze!)

Przykładowy przepływ pracy

dbr
źródło
6
@dbr, popychacz przycisku GUI! :) Żartuję, to dobra sugestia!
willasaywhat
Tak, to była doskonała sugestia :) Napisałem nawet akcje Automatora dla niektórych moich aplikacji i nadal o tym zapominam w takich chwilach :)
Jason Coco
Nie mogę zmusić tego do pracy z nohup, a la "nohup / usr / bin / myscript &; disown -a && exit 0". Potrzebuję aplikacji / przepływu pracy, aby uruchomić skrypt i natychmiast wyjść. Jakieś pomysły? :-)
godzina powrotu
3
@martineau Jeśli otworzysz aplikację, robiąc open -a SomeAppThing.app --args --etc=2to, powinieneś się skupić. Alternatywnie możesz skupić się na Applescript (np. osascript -e 'tell application "Google Chrome" to activate')
dbr
1
Uwaga: jeśli twój skrypt uruchamia aplikację GUI, która pozostanie otwarta przez jakiś czas, wyświetli się stale obracająca się ikona koła zębatego na pasku zadań, dopóki aplikacja nie zostanie zamknięta. Jednym ze sposobów obejścia tego problemu jest dodanie `&> / dev / null &` do wiersza uruchamiania skryptu, aby Automator nie czekał.
ewall
50

Jeśli nie potrzebujesz okna terminala, możesz przekształcić dowolny plik wykonywalny w aplikację, po prostu tworząc skrypt powłoki Examplei przenosząc go do nazwy pliku Example.app/Contents/MacOS/Example. Możesz umieścić tę nową aplikację w stacji dokującej jak każdą inną i uruchomić ją jednym kliknięciem.

UWAGA: nazwa aplikacji musi dokładnie odpowiadać nazwie skryptu. Zatem katalog najwyższego poziomu musi być, Example.appa skrypt w Contents/MacOSpodkatalogu musi mieć nazwę Example, a skrypt musi być wykonywalny.

Jeśli potrzebujesz wyświetlić okno terminala, nie mam prostego rozwiązania. Prawdopodobnie mógłbyś coś zrobić z Applescript, ale to nie jest zbyt czyste.

Jeremy Banks
źródło
1
Nie wiesz, czy istnieje łatwy sposób przekazywania plików jako argumentów do skryptu powłoki? W przypadku plików otwieranych przy użyciu polecenia „otwórz za pomocą ...”.
Fuzzy76,
9
Dla każdego, kto próbuje to zrobić - nazwa aplikacji musi dokładnie odpowiadać nazwie skryptu. Więc tak naprawdę musi być example.sh.app, a nie tylko example.app. Otrzymasz ostrzeżenie o uszkodzonej aplikacji, jeśli te nie pasują
Kip
1
Aby wyjaśnić - jestem noobem OSX - masz na myśli po prostu utworzenie struktury folderów, takiej jak ta pokazana w twoim przykładzie, z umieszczonym w niej plikiem skryptu, jak pokazano?
martineau
2
@martineau Tak, zgadza się. Jeśli utworzysz folder, którego nazwa kończy się na .appi taką strukturą, będzie on traktowany jako aplikacja wykonywalna. Jeśli chcesz przejrzeć zawartość tego folderu w Finderze, musisz kliknąć go prawym przyciskiem myszy i wybrać opcję „wyświetl zawartość pakietu” (ponieważ dwukrotne kliknięcie spowoduje uruchomienie aplikacji). W terminalu pojawi się po prostu jako folder. (Nie jestem pewien, czy Finder pozwoli ci samodzielnie zmienić nazwę folderu na .app; może zajść potrzeba zmiany nazwy w Terminalu.)
Jeremy Banks.
1
Właśnie spróbowałem tego i otrzymałem błąd w El Capitan (10.11): „Nie można otworzyć… ponieważ aplikacje powerpc nie są już obsługiwane”. : D To całkiem interesujące!
AllenH
26

Na OSX Mavericks:

  1. Utwórz swój skrypt powłoki.
  2. Spraw, aby Twój skrypt powłoki był wykonywalny:

    chmod +x your-shell-script.sh
  3. Zmień nazwę skryptu, aby miał .appprzyrostek:

    mv your-shell-script.sh your-shell-script.app
  4. Przeciągnij skrypt do stacji dokującej OSX.
  5. Zmień nazwę skryptu z powrotem na .shsufiks:

    mv your-shell-script.app your-shell-script.sh
  6. Kliknij plik prawym przyciskiem myszy w Finderze i kliknij opcję „Uzyskaj informacje”.
  7. W dolnej części okna ustaw skrypt powłoki tak, aby otwierał się za pomocą terminala.

Teraz po kliknięciu skryptu w doku pojawi się okno terminala i uruchomi skrypt.

Bonus: Aby terminal zamykał się po zakończeniu skryptu, dodaj exit 0na końcu i zmień ustawienia terminala na „zamknij powłokę, jeśli wyjdziesz z niej w sposób czysty”, tak jak jest to opisane w tej odpowiedzi SO .

stiemannkj1
źródło
Fajnie, to zadziałało dla mnie, jakikolwiek sposób na przypadek ikony, którą się zastanawiam. FYI: Również krok 7 odnosi się do pliku, a nie do pozycji menu ...
Mike Q
tak miło! tylko wszystkie pliki .sh z otwartym terminalem.
iHTCboy,
@ stiemannkj1, czy to pokazuje ikonę, gdy aplikacja jest uruchomiona? Czy można to ukryć?
Pacerier,
@Pacerier, przepraszam, nie jestem już na OSX (przeszedłem na Linuksa :)). Możesz spróbować odpowiedzi Jeremy Bank . Nie mam innych pomysłów, a ponieważ nie mam OSX, nie mogę nic przetestować ani zepsuć, aby spróbować pokazać / ukryć ikonę ..
stiemannkj1
17

Wiem, że to stare, ale na wypadek, gdyby było pomocne dla innych:

Jeśli potrzebujesz uruchomić skrypt i chcesz, aby pojawił się terminal, abyś mógł zobaczyć wyniki, które możesz zrobić, tak jak powiedział Abyss Knight, i zmień rozszerzenie na .command. Jeśli klikniesz go dwukrotnie, otworzy się okno terminala i uruchomi się.

Jednak potrzebowałem tego do uruchomienia z automatora lub appleScript. Aby to otworzyć nowy terminal, polecenie, które uruchomiłem z polecenia „uruchom skrypt powłoki”, brzmiało „otwórz myShellScript.command” i zostało otwarte w nowym terminalu.

Jason Tholstrup
źródło
wspaniale, dzięki! Teraz wszyscy chcą, aby było to idealne rozwiązanie, które byłoby sposobem na zamknięcie okna terminala po zakończeniu skryptu.
Peter M
1
cóż, jeśli masz zamknięte okno przy wyjściu wybrane w preferencjach terminala, możesz dodać polecenie wyjścia do swojego skryptu i będziesz mieć to, czego chcesz.
Jason Tholstrup,
7

Tak długo, jak skrypt jest wykonywalny i nie ma żadnego rozszerzenia, możesz go przeciągnąć tak, jak jest, na prawą stronę (stronę dokumentu) Docka, a po kliknięciu zostanie uruchomiony w oknie terminala zamiast otwierania edytora.

Jeśli chcesz mieć rozszerzenie (takie jak foo.sh), możesz przejść do okna informacji o pliku w Finderze i zmienić domyślną aplikację dla tego konkretnego skryptu z dowolnego innego (TextEdit, TextMate, cokolwiek jest ustawione domyślnie na komputerze .sh) do Terminala. Będzie wtedy po prostu wykonywany zamiast otwierania w edytorze tekstu. Ponownie będziesz musiał przeciągnąć go na prawą stronę Docku.

Jason Coco
źródło
1
UWAGA : Działa to jak mistrz w systemie OS X 10.10 Yosemite. Nie mogę komentować 10.9
Bryan Ash
1
Działa 10.11.2018 Dziękuję Ci!
Yassine Imounachen
Działa też 10.12! Być może mój komentarz dotyczący 10.9 był błędny, ale zauważyłem, że trzeba się upewnić, że przeciągnąłeś go do części doku poniżej separatora. Niestety nie mam możliwości ponownego przetestowania 10.9.
stiemannkj1,
Nie ma potrzeby dodawania go do Docka. Można go uruchomić z pulpitu. Ale nie może być przedłużenia. Spraw, aby był wykonywalny i wystarczy dwukrotnie kliknąć. To najprostsza opcja, jaką widziałem.
Rich Apodaca
5

Myślę, że ten wątek może być pomocny: http://forums.macosxhints.com/archive/index.php/t-70973.html

Aby sparafrazować, możesz zmienić jego nazwę za pomocą rozszerzenia .command lub utworzyć AppleScript do uruchomienia powłoki.

willasaywhat
źródło
Przynajmniej w Snow Leopardzie dodanie rozszerzenia .command do skryptu powoduje, że działa on w terminalu po dwukrotnym kliknięciu, ale z jakiegoś powodu nadal nie można go przeciągnąć do doku. Jednak sugestie dbr i Jeremy'ego zadziałały w moim przypadku.
Jo Liss,
5

Jak wspomniał joe, stworzenie skryptu powłoki, a następnie utworzenie skryptu jabłkowego, który wywoła skrypt powłoki, osiągnie to i jest całkiem przydatne.

Skrypt powłoki

  1. Utwórz swój skrypt powłoki w swoim ulubionym edytorze tekstu, na przykład:

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (to uruchamia plik wykonywalny w32, używając frameworka mono)

  2. Zapisz skrypt powłoki, na przykład „StartKeepass.sh”

Apple Script

  1. Otwórz edytor AppleScript i wywołaj skrypt powłoki

    do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges

    • do shell script - Polecenie applecript do wywoływania zewnętrznych poleceń powłoki
    • "sh ...." - to jest twój skrypt powłoki (pełna ścieżka) utworzony w kroku pierwszym (możesz również uruchamiać polecenia bezpośrednie, mógłbym pominąć skrypt powłoki i po prostu uruchomić tutaj moje polecenie mono)
    • user name - deklaruje w applecript, że chcesz uruchomić komendę jako określony użytkownik
    • "<enter username here> - zamień na swoją nazwę użytkownika (zachowując cudzysłowy) ex "josh"
    • password - deklaruje, aby applecript Twoje hasło
    • "<enter password here>" - zamień na swoje hasło (zachowując cudzysłowy) ex "moje hasło"
    • with administrative privileges - deklaruje, że chcesz działać jako administrator

Utwórz swoją aplikację .APP

  1. zapisz swój skrypt jabłkowy jako nazwa_pliku.scpt, w moim przypadku RunKeepass.scpt

  2. zapisz jako ... twój applecript i zmień format pliku na aplikację, co w moim przypadku daje RunKeepass.app

  3. Skopiuj plik aplikacji do folderu aplikacji

CJoshDoll
źródło
5

W edytorze skryptów:

do shell script "/full/path/to/your/script -with 'all desired args'"

Zapisz jako pakiet aplikacji.

Dopóki wszystko, co chcesz zrobić, to uzyskać efekt skryptu, będzie to działać dobrze. Nie zobaczysz STDOUT ani STDERR.

Joe McMahon
źródło
2
Proponuję: „Zapisz jako pakiet aplikacji”. Pakiety uruchamiają się znacznie szybciej niż aplikacje.
James
-3

Ktoś napisał ...

Po prostu ustawiłem wszystkie pliki kończące się na „.sh”, aby były otwierane w Terminalu. Działa dobrze i nie musisz zmieniać nazwy każdego skryptu powłoki, który chcesz uruchomić.

Jonny
źródło