Chcę uruchomić aplikację na OSX ze skryptu. Muszę przekazać to argumenty wiersza poleceń. Niestety, open
nie akceptuje argumentów wiersza poleceń.
Jedyną opcją, o nohup myApp > /dev/null &
której przychodzi mi do głowy, jest uruchomienie mojej aplikacji, aby mogła istnieć niezależnie od skryptu, który ją uruchamia.
Jakieś lepsze sugestie?
nohup &
rozwiązuje problem?Odpowiedzi:
W systemie OS X 10.6
open
polecenie zostało rozszerzone, aby umożliwić przekazywanie argumentów do aplikacji:Ale w przypadku starszych wersji systemu Mac OS X i ponieważ pakiety aplikacji nie są zaprojektowane do przekazywania argumentów wiersza poleceń, konwencjonalnym mechanizmem jest użycie zdarzeń Apple dla plików, takich jak tutaj dla aplikacji Cocoa lub tutaj dla aplikacji Carbon. Możesz też prawdopodobnie zrobić coś niezręcznego, przekazując parametry przy użyciu zmiennych środowiskowych.
źródło
open
- jak mówi odpowiedź - nie są zaprojektowane do pracy z wiersza poleceń. "Czemu?" Ponieważ taki właśnie jest Mac OS X.Jak wspomniano w pytaniu tutaj The
open
polecenie 10.6 ma terazargs
flagę, więc można zadzwonić:open -n ./AppName.app --args -AppCommandLineArg
źródło
Pakiet aplikacji (
.app
plik) to w rzeczywistości zbiór katalogów. Zamiast używaćopen
i.app
nazwy, możesz do niego wejść i uruchomić właściwy plik binarny. Na przykład:To jest rzeczywisty plik binarny, który może akceptować argumenty (lub nie, w
LittleSnapper
przypadku).źródło
DYLD_LIBRARY_PATH
,DYLD_FRAMEWORK_PATH
.W przypadku, gdy Twoja aplikacja musi działać na plikach (co normalnie powinien być przekazane jako:)
./myApp *.jpg
, możesz to zrobić w następujący sposób:źródło
open something.py -a Eclipse.app
Poleciłbym technikę, którą oferuje MathieuK. W moim przypadku musiałem wypróbować to z Chromium:
Zdaję sobie sprawę, że to nie rozwiązuje problemu OP, ale mam nadzieję, że oszczędza to czas kogoś innego. :)
źródło
open
ma również flagę -a, której można użyć do otwarcia aplikacji z folderu Aplikacje według jej nazwy (lub według identyfikatora pakietu z flagą -b). Możesz to połączyć z opcją --args, aby osiągnąć żądany wynik:Aby otworzyć wideo w odtwarzaczu VLC, które powinno skalować się ze współczynnikiem 2x i zapętlić, możesz na przykład wykonać:
Zauważ, że nie mogłem uzyskać danych wyjściowych poleceń na terminalu. (chociaż nie próbowałem niczego, aby to rozwiązać)
źródło
open -a
celowo powtórzyłeś ?? W każdym razieopen -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir=/Users/an/userll
dla mnie nie działa.Chciałem mieć uruchomione dwie oddzielne instancje Chrome, każda z własnym profilem. Chciałem móc je uruchamiać ze Spotlight , tak jak mam zwyczaj uruchamiania aplikacji na Maca. Innymi słowy, potrzebowałem dwóch zwykłych aplikacji na Maca,
regChrome
do normalnego przeglądania ialtChrome
korzystania ze specjalnego profilu, aby móc je łatwo uruchomić, naciskając klawisz-spacji, aby wywołać Spotlight, a następnie „reg” lub „alt”, a następnie Enter.Przypuszczam, że brutalnym sposobem osiągnięcia powyższego celu byłoby wykonanie dwóch kopii pakietu aplikacji Google Chrome pod odpowiednimi nazwami. Ale to brzydkie i komplikuje aktualizację.
Skończyło się na dwóch aplikacjach AppleScript zawierających po dwa polecenia. Oto jeden dla
altChrome
:Druga linia uruchamia Chrome z alternatywnym profilem (
--user-data-dir
parametrem).Pierwsza linia to nieudana próba nadania obu aplikacjom odrębnych ikon. Początkowo wydaje się, że działa dobrze. Jednak prędzej czy później Chrome ponownie odczytuje plik ikony i pobiera plik odpowiadający tej, która z dwóch aplikacji została uruchomiona jako ostatnia, w wyniku czego dwie uruchomione aplikacje mają tę samą ikonę. Ale nie zadałem sobie trudu, aby to naprawić - trzymam dwie przeglądarki na osobnych pulpitach, a nawigacja między nimi nie stanowi problemu.
źródło
Począwszy od OS X Yosemite , możemy teraz używać AppleScript i Automator do automatyzacji złożonych zadań. JavaScript do automatyzacji może być teraz używany jako język skryptowy.
Ta strona zawiera dobry przykładowy skrypt, który można napisać w wierszu poleceń przy użyciu trybów interaktywnych bash i osascript . Otwiera kartę Safari i przechodzi do
http://developer.telerik.com/featured/javascript-os-x-automation-example/example.com
.źródło
Ze skryptem jabłkowym:
źródło
Dlaczego nie ustawić ścieżki dodawania do kosza aplikacji. W przypadku MacVima wykonałem następujące czynności.
Alias to kolejna opcja, którą wypróbowałem.
Dzięki PATH eksportu mogę wywoływać wszystkie polecenia w aplikacji. Argumenty przeszły pomyślnie mój test z MacVimem. Podczas gdy alias, musiałem aliasować każde polecenie w koszu.
Ciesz się mocą aliasów i PATH. Jednak musisz monitorować zmiany po uaktualnieniu systemu operacyjnego.
źródło
Proste, tutaj zastąp „APP” nazwą aplikacji, którą chcesz uruchomić.
Dzięki mi później.
źródło
Możesz uruchamiać aplikacje za pomocą
open
:Powinno to otworzyć żądaną aplikację.
źródło