Próbuję skonfigurować kilka skrótów klawiaturowych, które otwierają określone sesje iTerm, co mogłem zrobić z BetterTouchTool i odrobiną magii AppleScript. Problem polega na tym, że OS X nalega na otwarcie okna terminala dla dowolnego skryptu powłoki wykonanego za pomocą GUI (tj. Z Findera lub jako skrót klawiaturowy z BetterTouchTool). Okno terminala nie pojawi się, jeśli uruchomię skrypt bezpośrednio z innego terminala.
Rozwiązaniem, które znalazłem, było owinięcie skryptu w katalogu .app, co rozwiązuje problem zbędnego okna terminala, ale ma kilka innych problemów (na przykład OS X wydaje się traktować każde powstałe okno iTerm jako osobną aplikację, zaśmiecając moją stację dokującą ). (EDYCJA: to zachowanie zostało spowodowane przez błąd w moim skrypcie, patrz poniżej)
Próbowałem też przypisać aplikację Terminal do innego wirtualnego pulpitu w ustawieniach Spaces, próbując przenieść go poza zasięg wzroku, ale wtedy po prostu przełączy się na ten pulpit przed uruchomieniem skryptu.
Czy istnieje sposób, aby całkowicie wyłączyć to zachowanie? Znalazłem już ustawienie w preferencjach terminalu, aby zamknąć okno po zakończeniu skryptu, ale nadal denerwujące jest wyświetlanie okna terminala na sekundę.
źródło
Odpowiedzi:
Otwórz Automator , wybierz opcję Aplikacja , dodaj akcję Uruchom skrypt powłoki i wstaw polecenie Shell między cudzysłowami (jeśli masz plik, możesz go po prostu przeciągnąć i upuścić).
Oprócz grania, teraz możesz go zapisać (jako aplikację w dowolnym miejscu), a nawet ustawić ikonę .
źródło
&
a następnie wywołałem AppleScript, aby przenieść aplikację (w moim przypadkumplayer
) na przód:mplayer myvideo.avi &; osascript -e 'tell application "System Events" to set frontmost of the first process whose displayed name is "mplayer" to true'
mplayer
do odtwarzania wideo z pokazu slajdów (w Skim). Jest błąd, że odtwarzacz pozostaje w tle, jeśli Skim jest ustawiony na pełny ekran, nie jestem jednak pewien, czy ten błąd dotyczy tylko Skim lub wszystkich aplikacji pełnoekranowych, więc pomyślałem, że opublikuję tutaj moje rozwiązanie.Oto szybki i nieprzyzwoity przykład bez żadnego wysiłku (dla aplikacji o nazwie „myapp”):
Utwórz częściową hierarchię aplikacji:
Upewnij się, że pierwszy wiersz skryptu zawiera pełną ścieżkę do potrzebnego programu, np.
Nazwij swój skrypt powłoki „myapp” (bez cudzysłowów, bez rozszerzenia), nadaj mu uprawnienia do wykonywania, a następnie umieść go w podkatalogu MacOS. Aby nadać mu uprawnienia do wykonywania:
Przejdź do podkatalogu Contents i utwórz plik PkgInfo zawierający ciąg: APPL ???? [brak terminatora linii na końcu łańcucha!] Użyj narzędzia cat (1), aby utworzyć plik:
Po wpisaniu łańcucha (nie wciskaj return!), Wprowadź dwa control-D, które zamkną
plik bez terminatora linii i powrócą do zachęty powłoki.)
Kliknij dwukrotnie nową „aplikację” w wyszukiwarce. Będzie działać bez okna.
źródło
Warto sprawdzić Platypus , który tworzy aplikacje Mac OS X ze skryptów powłoki i innych interpretowanych skryptów.
źródło
Oto małe obejście na wypadek, gdybyś miał ochotę uruchomić programy uruchamiające takie jak Alfred . Używam go codziennie i kupiłem Powerpack , który pozwala na uruchamianie cichych skryptów powłoki.
Nie będą one otwierać terminala podczas działania i mogą być powiązane z dowolną sekwencją słów kluczowych. Mogą nawet zawierać parametry i mieć dodatkowe opcje:
Używam tego do niektórych małych fragmentów i jest bardzo elastyczny.
źródło
Jeśli dodasz klucz
LSUIElement
i ustawisz go1
wInfo.plist
swojej aplikacji, nie utworzy on ikony w Docku.Oto
Info.plist
moja mała aplikacja skryptowa do powłoki:źródło
touch
zainstalować pakiet, aby upewnić się, że użyto najnowszej wersji. Ale tak naprawdę nie podoba mi się podejście pakietowe, ponieważ wydaje się, że zawsze będzie tworzyć osobne instancje aplikacjido shell script "say 'arsti'"
, to nie otworzy okna terminalu.pgrep
, a następnie przekazuje odpowiedni kod bezpośrednio doosascript
(interpreter AppleScript). Problem polega na tym, żepgrep
pochodzi od Homebrew i nie jest ustawiony domyślnie$PATH
. Tak więc mój skrypt zawsze uruchamiał nową instancję iTerm, nawet jeśli już działała. Po dodaniu pełnej ścieżki dopgrep
skryptu podejście pakietowe wydaje się w końcu działać dobrze, więc myślę, że na razie jestem szczęśliwy ;-)CFBundleExecutable
iCFBundleIconFile
), udało mi się to doskonale.Oto trochę obejścia:
Skompiluj applecript, który wywołuje skrypt powłoki :)
osacompile
Skompiluje'do shell script "XXX"'
AppleScript fragment. Twój skrypt powłoki to XXX.Uważaj na cytowanie, skrypt powłoki musi być cytowany poprawnie, aby ominąć powłokę, której używasz do kompilacji.
Ale można to uruchomić z BetterTouchTool bez żadnej bzdury.
źródło
Istnieje inny możliwy trening. Bezpieczny skrypt powłoki w przepływie pracy automatyzatora. Wywołaj przepływ pracy z uruchomionym. Kod to:
Nie uruchomi to żadnego programu ani nie pojawi się na pasku menu, a jego działanie jest cichsze niż aplikacja Platypus.
Jeszcze lepszy sposób wykonywania skryptów powłoki jest uruchamiany bezpośrednio.
wykona polecenie bardzo cicho w tle.
źródło