Ich fange an, mit Crunchbang (das auf Debian basiert und Terminator verwendet ) als Webentwicklungsumgebung zu experimentieren , und eines der Dinge, mit denen ich zu kämpfen habe, ist das Verhalten von xdg-open
. Ich komme aus einem OSX-Umfeld, also verzeihen Sie mir, wenn sich diese Frage als dicht herausstellt.
Ich möchte in der Lage sein, eine URL mit zu öffnen xdg-open http://www.google.com
und dann weiterhin dasselbe Terminalfenster zu verwenden, um zu arbeiten (so open
funktioniert es in OSX). Im Moment xdg-open
belegt using den aktuellen Tab / die aktuelle Sitzung, bis ich das Browserfenster schließe oder Dinge manuell mit beende ctrl + c
. Ich würde es sehr bevorzugen, wenn ein neuer Prozess gestartet wird. Auf diese Weise kann ich eine URL öffnen, auf Daten auf der Seite verweisen und sie in derselben Registerkarte / demselben Fenster verwenden, ohne eine weitere öffnen zu müssen.
quelle
Antworten:
Seltsamerweise funktioniert es auf meinem Debian-Rechner so. Versuchen Sie es im Hintergrund auszuführen:
Sie können dies zu einer Funktion machen, indem Sie Ihrer
~/.bashrc
Datei die folgenden Zeilen hinzufügen :Sie können dann einfach ausführen
open http://www.google.com
und es wird im Hintergrund ausgeführt.quelle
open
haben (dh open = 'xdg-open'). Gibt es eine Möglichkeit, die Funktionalität von zu erhalten,xdg-open <url> &
ohne eine Shell-Funktion zu verwenden?Wenn Sie den Prozess von der aktuellen Shell trennen möchten, anstatt ihn als Hintergrundjob zu starten
xdg-open http://www.google.com &
, gefällt mir dasdetach
Dienstprogramm:Man könnte dafür einen Alias erstellen. Ich mag
detach
es,nohup
wenn stdin stdout und stderr standardmäßig geschlossen werden, damit der Aufruf sauberer ist.quelle
detach
scheint es in meiner Distribution nicht zu existieren.nohup
Startet den Prozess, belegt aber immer noch das Terminalfenster.detach
ist auch nicht in meiner Distribution; aber Python kann Öffnen URLs und Abnehmen behandeln:python -m webbrowser -t "http://example.com"
. Dies sollte auf fast allen neueren Linux-Distributionen sofort funktionieren.detach
es nicht einmal in der AUR ist, erwies es sich als einfach, von der Quelle zu installieren und war außerdem das einzige Programm, das das erreichte, was ich wollte. (Die hier und auf derdetach
Website aufgeführten Alternativen erlauben es nicht, die Shell zu schließen, solange sie ausgeführtxdg-open
wird, oder haben zumindestdetach
meine Shell nicht dazu gebracht, sich ein bisschen zu beschweren.)xdg-open
Wartet, bis das Programm beendet ist. Dies ist beabsichtigt. Wenn es sich bei dem Programm um ein Textmodusprogramm handelt, muss es im Terminal im Vordergrund bleiben. Auch wenn das Programm eine grafische Benutzeroberfläche ist, ist dieses Verhalten in bestimmten Fällen hilfreichxdg-open
es von einem Skript verwendet wird und das Skript nach dem Bearbeiten der Datei etwas ausführen möchte (z. B. die neue Version an einen anderen Ort senden oder etwas mit der neuen Version erstellen).Wenn Sie nicht warten möchten, führen Sie
xdg-open
das Programm im Hintergrund aus. Sie können jeden Shell-Befehl im Hintergrund ausführen, indem Sie ein kaufmännisches Und am Ende einfügen.Bei einigen Programmen wird
xdg-open
sofort zurückgegeben. Was tatsächlich passiert, ist, dass dasxdg-open
aufrufende Programm sofort zurückkehrt. Dies geschieht normalerweise mit GUI-Programmen, die alle Dateien in einer einzelnen Instanz öffnen: Wenn Sie sie ein zweites Mal starten, senden sie der ausgeführten Instanz eine Nachricht, in der sie aufgefordert werden, die Datei zu öffnen, und beenden sie sofort.quelle
xdg-open
kehrt sofort zurück (ich kann das unter Ubuntu 16.04 bestätigen), aber das Programm, das es aufruft, wird möglicherweise in den Hintergrund verschoben.xdg-open
Ruft auf meinem System beispielsweise Evince für PDF-Dateien auf.evince foo.pdf
blockiert, bis Sie die PDF-Datei schließen, es sei denn, die PDF-Datei ist bereits geöffnet. In diesem Fall fokussiert der zweiteevince
Prozess, der durch gestartet wird,xdg-open
die vorhandene Instanz und wird beendet.xdg-open
hat keine Kontrolle darüber, es sei denn, es gibt eine Möglichkeit, das Programm am Laufen zu halten.Durch die Kombination von terdon Antwort und Dan D. Diskussion
nohup
habe ich eine Funktion , die genau das tut , was ich will:Ich habe dies zu meiner
.bashrc/.zshrc
Datei hinzugefügt :Für eine Erklärung
/dev/null 2>&1
siehe diese Diskussion über das Versteckenstdout
undstderr
.quelle
Versuche dies:
Ich benutze diese Technik, um magnet: // URLs in meinen Bit Torrent-Client Vuze einzureihen.
Die einfachen Anführungszeichen schützen den Inhalt der URLs, sodass die Shell nicht versucht, sie zu interpretieren.
quelle
xdg-open
? Wie es scheint, haben mehrere der hier genannten Antwortenden darauf hingewiesen, dass das normale Verhalten darin besteht, dass die Steuerung nach einiger Zeit wieder an das Terminal zurückgegeben wird.Wenn Sie Webseiten über die Befehlszeile (Schleife) öffnen müssen, können Sie einfach den Browser öffnen, bevor Sie das Skript starten.
In diesem Fall wartet es nicht darauf, dass der Browser nach dem ersten Link geschlossen wird, sondern öffnet sie alle in neuen Registerkarten.
quelle
Bis heute hat keine dieser Optionen für mich funktioniert. Mir ist völlig bewusst, dass das OP "use xdg-open" sagte, sorry im Voraus.
Am Ende habe ich eine ganz einfache Sache gemacht
chrome https://google.es --new-window || chromium https://google.es --new-window || firefox https://google.es
.Wenn Sie keinen dieser 3 Browser haben, können Sie einfach die richtigen mit Ihrer bevorzugten Reihenfolge verwenden.
Hinweis: Firefox hat ein neues Fenster geöffnet, ohne etwas hinzuzufügen. Fall funktioniert nicht nahtlos für Sie, verwenden Sie
firefox https://google.es -new-instance -new-window
. Beachten Sie, dass dies nur eine-
für Firefox-Flags ist.quelle
disown ist dafür der richtige Befehl.
Ich benutze dazu 2 Funktionen, um es lesbarer zu halten.
quelle
disown
verhindert nicht, dass Fehler an das Terminal gesendet werden.