Zaczynam eksperymentować z Crunchbang (opartym na Debianie i używającym terminatora ) jako środowiskiem programistycznym, a jedną z rzeczy, z którą mam problemy, jest zachowanie xdg-open
. Pochodzę z OSX, więc wybacz mi, jeśli to pytanie jest tak gęste.
Chciałbym móc otworzyć adres URL, xdg-open http://www.google.com
a następnie nadal używać tego samego okna terminala do pracy (tak open
działa w OSX). W tej chwili używanie xdg-open
zajmuje bieżącą kartę / sesję, dopóki nie zamknę okna przeglądarki lub nie zakończę ręcznie ctrl + c
. Wolałbym, żeby zaczął nowy proces, w ten sposób mogę otworzyć adres URL, odnieść się do danych na stronie i używać go w tej samej karcie / oknie bez konieczności otwierania dodatkowego.
command-line
file-opening
Nick Tomlin
źródło
źródło
Odpowiedzi:
Dziwne, działa tak po wyjęciu z pudełka na moim Debianie. Spróbuj uruchomić go w tle:
Możesz zrobić z tego funkcję, dodając następujące wiersze do swojego
~/.bashrc
pliku:Następnie możesz po prostu uruchomić,
open http://www.google.com
a on będzie działał w tle.źródło
open
(tj. Open = 'xdg-open'). Czy istnieje sposób na uzyskanie funkcjonalnościxdg-open <url> &
bez używania funkcji powłoki?Jeśli chcesz odłączyć proces od bieżącej powłoki zamiast uruchamiać go jako zadanie w tle
xdg-open http://www.google.com &
, podoba mi siędetach
narzędzie:Można do tego stworzyć alias. Podoba mi
detach
się,nohup
ponieważ domyślnie zamyka stdin stdout i stderr, więc jego wywołanie jest czystsze.źródło
detach
wydaje się , że nie istnieje w mojej dystrybucji.nohup
uruchamia proces, ale nadal zajmuje okno terminala.detach
też nie jest w mojej dystrybucji; ale pyton może obsłużyć otwieranie adresów URL i odłączania:python -m webbrowser -t "http://example.com"
. Powinno to działać od razu po wyjęciu z pudełka prawie wszystkich nieco nowych dystrybucji Linuksa.detach
nie ma go nawet w AUR, jego instalacja ze źródła okazała się łatwa, a ponadto był to jedyny program, który osiągnął to, czego chciałem. (alternatywy wymienione tutaj i nadetach
stronie internetowej nie pozwalają na zamykanie powłoki tak długo, jakxdg-open
działa, lub przynajmniejdetach
nie spowodowało, że moja skorupa narzekała trochę)xdg-open
czeka na zakończenie programu. To jest z założenia. Jeśli program jest programem tekstowym, musi pozostać na pierwszym planie w terminalu. Nawet jeśli program jest GUI, takie zachowanie jest przydatne w przypadku, gdyxdg-open
jest używane ze skryptu, a skrypt chce wykonać coś po edycji pliku (np. Wysłać gdzieś nową wersję lub w inny sposób zrobić coś z nową wersją).Jeśli nie chcesz czekać, biegnij
xdg-open
w tle. Możesz uruchomić dowolne polecenie powłoki w tle, umieszczając na końcu znak ampersand.W przypadku niektórych programów
xdg-open
natychmiast wraca. W rzeczywistości program, który sięxdg-open
wywołuje, natychmiast wraca. Zazwyczaj dzieje się tak w przypadku programów GUI, które otwierają wszystkie pliki w jednej instancji: gdy uruchomisz je po raz drugi, wysyłają komunikat do działającej instancji, informując go o otwarciu pliku i natychmiast zamykają działanie.źródło
xdg-open
natychmiast wraca (mogę to potwierdzić na Ubuntu 16.04), ale program, który wywołuje, może przejść w tło. Na przykład w moim systemiexdg-open
wywołuje Evince dla plików PDF;evince foo.pdf
blokuje do momentu zamknięcia pliku PDF, chyba że plik PDF jest już otwarty, w którym to przypadku drugievince
proces rozpoczęty przezxdg-open
skupia istniejącą instancję i kończy działanie.xdg-open
nie ma nad tym kontroli, chyba że istnieje sposób, aby program działał poprawnie.Łącząc odpowiedź terdona i dyskusję Dana D. o
nohup
stworzyłem funkcję, która robi dokładnie to, czego chcę:Dodałem to do mojego
.bashrc/.zshrc
pliku:Wyjaśnienie
/dev/null 2>&1
patrz dyskusja na temat ukrywaniastdout
istderr
.źródło
Spróbuj tego:
Używam tej techniki do umieszczania w kolejce adresów URL magnesu: // do mojego klienta Vuze Bit Torrent.
Pojedyncze cudzysłowy pomagają chronić zawartość adresów URL, aby powłoka nie próbowała ich interpretować.
źródło
xdg-open
? Wygląda na to, że kilku obecnych tutaj ankieterów wskazało, że normalne zachowanie polega na tym, że kontrola wraca do terminala po pewnym czasie.Jeśli chcesz otworzyć strony internetowe z linii poleceń (pętli), możesz po prostu otworzyć przeglądarkę przed uruchomieniem skryptu.
W tym przypadku nie czeka na zamknięcie przeglądarki po pierwszym łączu, ale otwiera je wszystkie w nowych kartach.
źródło
Jak dziś żadna z tych opcji nie działała dla mnie. Jestem w pełni świadomy, że PO powiedział „użyj xdg-open”, z góry przepraszam.
Skończyło się na tym, że robię coś naprawdę prostego
chrome https://google.es --new-window || chromium https://google.es --new-window || firefox https://google.es
.Jeśli nie masz żadnej z tych 3 przeglądarek, możesz po prostu użyć odpowiednich z własnymi preferencjami.
Uwaga: Firefox otworzył nowe okno bez niczego. Sprawa nie działa dla ciebie szwem, użyj
firefox https://google.es -new-instance -new-window
. Pamiętaj, że jest to tylko jedna-
flaga Floksa.źródło
disown jest do tego właściwym poleceniem.
Używam do tego 2 funkcji, aby była bardziej czytelna.
źródło
disown
nie zapobiega wysyłaniu błędów do terminala.