Wykonuję sporo pracy w wierszu poleceń i definiuję wiele aliasów formy:
alias skim='/Applications/Skim.app/Contents/MacOS/Skim'
Czy istnieje sposób na dodanie magii, tak aby prośba o plik wykonywalny „foo” automatycznie używa pliku wykonywalnego /Applications/Foo.app/Contents/MacOS/Foo? To jest na OS X 10.6.
(Zdaję sobie sprawę, że mógłbym to zrobić open foo.pdf
, ale Skim nie jest domyślnym czytnikiem plików PDF i chciałbym ogólne rozwiązanie - w niektórych przypadkach nie jest odpowiednie ustawienie danej aplikacji jako domyślnej procedury obsługi pliku).
open -a Skim foo.pdf
.Odpowiedzi:
Wreszcie mam: dodaj to do swojego
.bash_profile
Teraz następująca praca:
Edytuj przez Reid:
Zaimplementowałem powyższe jako skrypt w języku Python, który tworzy skrypty zamiast aliasów. Musisz postawić
~/bin/mankoffmagic
na swojej drodze. Jeśli chcesz, aby opakowania były aktualizowane automatycznie, uruchamiaj je regularnie z crona lub z innej strony.źródło
ls
polecenia, a to również tam zadziała.Nie potrzebujesz niczego wymyślnego, masz już odpowiedź. Próbować:
open /Applications/Foo.app bar.pdf
po edycji
W świetle poniższych komentarzy, myślę, że moja odpowiedź byłaby względnie podobna ... Zrobiłbym funkcję, która zastępuje otwarte, robi push-to
/Applications
, wywołuje/usr/bin/open $appName.app $args
, wyskakuje i wraca.Mam obsesję na punkcie pisania skryptów powłoki, ale coś w stylu poniżej, które obejmuje specjalne przypadki i utrzymuje prawie taką samą składnię, jak Apple dla open. Lubię dbać o środowisko tak czyste, jak to możliwe.
Jestem pewien, że składnia pochodzi z kosmosu:
przy drugiej edycji
patrząc na komentarz @ mankoffa do pierwotnego pytania, większość rzeczy w powyższej funkcji byłaby prawdopodobnie stratą czasu, ponieważ można po prostu użyć
open -a $appName
. Więc mankoff ma prawdopodobnie najłatwiejsze rozwiązanie i powinien zmienić swój komentarz na odpowiedź;)źródło
Są dwa rozwiązania, o których mogę myśleć:
Info.plist
Prostszy sposób - korzystając z pliku w każdymContents
katalogu .app , utwórz indeks wartości dla kluczy CFBundleExecutable. Następnie dodaj krótki alias, który wywołuje skrypt (perl, python, cokolwiek) z nazwą pliku wykonywalnego i argumentami, które chcesz przekazać.Indeks byłby parami plików wykonywalnych i ścieżek do tych plików wykonywalnych. Będziesz musiał napisać cykliczny skrypt, aby aktualizować ten skrypt.
W końcu możesz zadzwonić:
gdzie f jest aliasem skryptu, który sprawdza w indeksie plik wykonywalny o nazwie
foo
.Podsumowując, nie ma dużo pracy, aby uzyskać pożądaną funkcjonalność.
Trudniejszy sposób - Rozszerz swoją powłokę, aby uzupełnić obsługę jej
command_not_found
błędów. Zasadniczo zaimplementowałbyśmethod_missing
funkcjonalność w stylu Ruby w dowolnej używanej powłoce. Kiedycommand_not_found
został rzucony, twoja metoda sprawdzi nazwy wykonywalnych zainstalowanych aplikacji.źródło
Jabłko na ratunek:
Zamień nazwę aplikacji na aplikację, którą chcesz uruchomić i gotowe. W razie potrzeby możesz oczywiście ustawić funkcję powłoki:
i użyj go w ten sposób:
Nienawidzę AppleScript, ale czasami jest przydatny i uważam, że jedynym sposobem na zaadresowanie aplikacji jest po prostu nazwa w wierszu poleceń. Cała reszta będzie wymagała pełnej ścieżki.
źródło