Odpowiednik polecenia „open” dla systemu Mac OS X dla systemu Linux [zamknięty]

214

Polecenie „otwórz” w Mac OS X jest bardzo przydatne w wierszu poleceń. Z „man open”:

openPolecenie otwiera plik (lub katalog lub adres URL), tak jakby trzeba było dwukrotnie kliknąć ikonę pliku. Jeśli nie określono nazwy aplikacji, do otwarcia określonych plików używana jest domyślna aplikacja określona przez LaunchServices.

Oznacza to, że jeśli chcę otworzyć plik PDF za pomocą domyślnej przeglądarki plików PDF (okazuje się, że jest to wersja zapoznawcza), muszę tylko:

open my.pdf

Jednak w systemie Linux, aby otworzyć plik PDF z wiersza polecenia, musiałem się rozejrzeć, aby znaleźć domyślną przeglądarkę plików PDF, na przykład „evince” (kto by zgadł?), A następnie

evince my.pdf

Czy w wierszu poleceń systemu Linux istnieje prosty odpowiednik polecenia „otwórz”?

Dzięki!

Joachim Sauer
źródło
6
Może to pytanie powinno zostać przeniesione na superuser.com?
quazgar
1
Super użytkownik wydaje się nieodpowiedni - czy istnieje StackOverflow dla „zwykłych użytkowników”, a może „programistów, którzy chcą pisać inne aplikacje”, np. Automatyzować?
Krazy Glew
askubuntu może pasować.
Gopherkhan

Odpowiedzi:

238

Możesz spróbować xdg-open, większość dystrybucji Linuksa ma to. Otworzy domyślną powiązaną aplikację dla twojego pliku.

Do Twojej wiadomości https://portland.freedesktop.org/doc/xdg-open.html

numer 5
źródło
13
Duża różnica między tym a tym open, że nie powoduje to otwarcia pliku / aplikacji w tle. Aplikacje Linuksa wydają się bardzo gadatliwe i często wysyłają wiele linii diagnostycznych i ostrzeżeń bezpośrednio do twojego terminala (nawet jeśli tak naprawdę nic nie poszło nie tak). Zazwyczaj xdg-open <file> &> /dev/null &zamiast tego muszę zrobić coś takiego . Czy jest w tym względzie coś lepszego niż xdg-open?
Suan
13
@Suan: Otwiera aplikację w „tle”, odłączonym od terminala, w taki sposób, że możesz kontynuować pracę w terminalu, jak tylko aplikacja zostanie uruchomiona. Więc końcowe &nie jest potrzebne. Jeśli chodzi o „wiele linii diagnostycznych”, pochodzą one z samej aplikacji, a nie zxdg-open . Jeśli nie chcesz żadnych danych wyjściowych, musisz &> /dev/nullnawet użyć evincebezpośrednio (przykład OP), więc Twoja skarga jest nieważna. xdg-openjest rzeczywiście właściwą drogą.
MestreLion,
15
@MestreLion Nie sądzę, aby skarga była całkowicie nieważna, ponieważ otwarte Mac nie powoduje echa danych wyjściowych aplikacji na terminalu.
Max Nanasy
7
@ MaxNanasy: dane wyjściowe pochodzą z aplikacji, to nie xdg-openjest wina, że są czatujące. Wyłączenie takich wiadomości powinno być wyborem użytkownika , a nie xdg. Prośba o coś „lepszego” niż próżna jest więc nieważna xdg-open. Ponadto, jeśli Mac opennie ma opcji wyprowadzania tych wiadomości, powiedziałbym, że opentak znacznie gorsze niż xdg-open, ponieważ kiedy używasz wiersza polecenia do uruchamiania plików, zwykle jesteś zainteresowany tymi danymi wyjściowymi (w przeciwnym razie dlaczego po prostu nie kliknąć dwukrotnie pliku w przeglądarce takiej jak Nautilus?)
MestreLion
12
@MestreLion Chociaż można by argumentować, że skarga jest trywialna, ponieważ alias open='xdg-open &>/dev/null'daje w przybliżeniu pożądane zachowanie (chociaż błędy samego xdg-open (w przeciwieństwie do samego uruchomionego programu) również zostałyby wyciszone, co jest niepożądane).
Max Nanasy,
76

Odpowiednikiem, którego szukasz, jest xdg-opentaki sam, jak openkomenda OS X. Na przykład:

xdg-open ~/Documents/Chubby_Bubbies.odt

Jednak naprawdę trudno jest pisać szybko i dokładnie. Zamiast tego powinieneś utworzyć alias do xdg-open, co znacznie przyspiesza proces.

Oczywiście możesz to openzrobić tak, aby pasowało do OS X (możesz wybrać cokolwiek chcesz), ale osobiście używam odpowiedniego nawiasu kwadratowego ( ]) do skrótu ze względu na szybkość. Aby tego użyć, dodaj do .bashrcpliku:

alias ']'='xdg-open'

Następnie, aby otworzyć dowolny zasób, użyj go jak dowolnego z poniższych przykładów:

] www.google.com
] file.txt
] ~/Pictures
] ssh://myserver.local/home/jeremy

Pozwala to również otworzyć przeglądarkę plików (np. Nautilus) w bieżącym katalogu:

] .

Z doświadczenia wynika, że ​​aliasy jednoliterowe najlepiej sprawdzają się w przypadku powyższego skrótu. W końcu celem jest wydajność. I możesz wrócić i zrobić ten sam alias w OS X - pozostawiam to jako ćwiczenie czytelnikowi. :-)

Jeremy Visser
źródło
26
Utworzyłem alias z „open” na „xdg-open”, aby był spójny zarówno na Linuksie, jak i na Macu.
Adam Byrtek,
To dobrze, ale nie świetnie, próbowałem otworzyć plik .url i otworzyłem go w gedit.
sorin
18
@sorin Czy chcesz, aby zabrzmiało to tak, jakby to moja wina ?!
Jeremy Visser
7
@sorin: xdg-openotwiera domyślną aplikację twojego systemu dla pliku. W twoim przypadku .urlpliki są ustawione na otwieranie w gedit. Jeśli chcesz to zmienić, kliknij plik prawym przyciskiem myszy w Nautilus i przejdź do Właściwości> Otwórz za pomocą, aby zmienić domyślną aplikację i xdg-openbędzie działać odpowiednio.
MestreLion,
Oto Gist , który stworzyłem, wystarczy skopiować i wkleić i wykonać polecenie w sekcji „Razem” w pierwszym komentarzu.
ozanmuyes
14

Właśnie to załatwiłem, więc pomyślałem, że napiszę, jak to zrobiłem, co ma szczególne znaczenie dla tego, o co poprosił Suan. Te kroki pozwalają po prostu wpisać „otwarty”, a nie terminal objęty wiadomościami, których nie potrzebujesz:

Utwórz skrypt o nazwie openw ~/bintreść jest po prostu:

xdg-open "$1" &> /dev/null &

Zapisz i zamknij skrypt, a następnie wpisz „source .profile” (lub .bash_profile, jeśli dotyczy). Tak więc wpisanie „open Music” otworzy folder z muzyką w graficznym interfejsie użytkownika nautilus i nie powinien nic wpisywać w twoim terminalu.

Anake
źródło
Co z aliasem i dziwną lokalizacją? Po prostu wywołaj sam skrypt openi umieść go w PATH (zazwyczaj w $HOME/bin/open)
tripleee
Na moim komputerze (ubuntu 11.10), jeśli dodasz skrypt o nazwie „open” do swojej ścieżki i spróbujesz zrobić to w ten sposób, zostanie on zablokowany przez / bin / open. Więc nie mogę znaleźć sposobu, aby dostać się do pracy bez aliasu.
Anake
Sztuką jest mieć własny skrypt w katalogu, który przychodzi wcześniej w swoim PATHniż /bin. Zgodnie z konwencją, jeśli $HOME/bintak, zostanie dodany na początku ŚCIEŻKI, przed katalogami systemowymi. Zwykle robi to twój .profilelub podobny. Na przykład domyślna .profilewersja Ubuntu robi dokładnie to.
potrójny
2
Przekierowanie wyjścia /dev/nulljest nieco kapryśne; być może możesz przekierować dane wyjściowe $HOME/.xsession-errorslub inne, aby diagnostyka nie została całkowicie utracona na wypadek, gdybyś musiał coś rozwiązać.
tripleee
1
@efdee: prawidłowe cytowanie wszystkich zmiennych jest dobrą praktyką programistyczną i jest niezbędne w skryptach bash. To nie ma nic wspólnego xdg-open, to problem z powłoką.
MestreLion,
11

Tradycyjnie można użyć polecenia „zobacz”. Który po prostu używa run-mailcap. Będzie to działać bez Gnome i X itp.

man see
Ali Afshar
źródło
3
Problem polega na tym, że run-mailcap(i wiele jego aliasów) korzysta z osobnej (i strasznie nieaktualnej) bazy danych powiązań aplikacji. Na przykład w moim systemie, podczas gdy .mp3utwory poprawnie otwierają się w VLC, .txtpliki otwierają się w mniejszej ilości (zamiast gedit), a .pdfpliki po prostu nie otwierają się! (Błąd: nie znaleziono reguł dotyczących „widoku” dla typu „application / pdf”)
MestreLion,
Jak powiedziałem, zależy to od każdego systemu. Niewiele aplikacji rejestruje się w taki sposób, aby run-mailcapje rozpoznać. xdg-openwykorzystuje wewnętrznie gvfs-open(w systemach Gnome, takich jak Ubuntu), który z kolei korzysta ze specyfikacji mime-database xdg, z której korzysta znacznie więcej aplikacji.
MestreLion,
Otworzyłem gimpdla mnie ponad 50 stron pliku PDF . Będę się trzymać xdg-open.
użytkownik1717828
Otwieranie plików TXT w less TXT X''D
Timo
4

gnom otwarty

Ana Betts
źródło
7
gnome-open jest teraz przestarzałe, a poza tym był już używany wewnętrznie przez xdg-openużytkownika na Gnome (teraz używa gvfs-open)
MestreLion
2

Jeśli masz poprawnie skonfigurowaną mimię, możesz jej użyć mimeopen. Sprawdź jego stronę podręcznika, ponieważ ma kilka przydatnych opcji.

stacksia
źródło
1
Byłoby miło, gdyby ta odpowiedź została rozszerzona. Byłbym zainteresowany, aby zobaczyć, jak to działa
Magnus
-3

W środowisku Gnome Desktop używam następującego polecenia:

nautilus `pwd` &

Jest to podobne do „otwartego”. polecenie w komputerze Mac

WonderLi
źródło
11
Ta odpowiedź ma wiele problemów: A) Otwiera bieżący katalog, a nie plik, zgodnie z żądaniem użytkownika. B) można użyć .zamiast „ pwd” c) W przypadku zmiany pwddo pliku, użytkownik będzie nadal trzeba trafić ENTER po Nautilus otwiera D) Nautilus Otwarcie pierwszy właśnie na to , aby otworzyć plik jest rozwiązaniem bardzo pośredni.
MestreLion,