Je commence à expérimenter avec Crunchbang (qui est basé sur Debian et utilise Terminator ) comme environnement de développement Web, et l'une des choses avec lesquelles je lutte est le comportement de xdg-open
. Je viens d'un arrière-plan OSX, alors pardonnez-moi si cette question se révèle aussi dense.
Je voudrais pouvoir ouvrir une URL avec xdg-open http://www.google.com
puis continuer à utiliser la même fenêtre de terminal pour travailler (c'est comme ça que open
fonctionne dans OSX). À l'heure actuelle, l'utilisation xdg-open
occupe l'onglet / la session en cours jusqu'à ce que je ferme la fenêtre du navigateur ou que je termine manuellement les choses avec ctrl + c
. Je préférerais de beaucoup qu'il démarre un nouveau processus, de cette façon, je peux ouvrir une URL, faire référence aux données sur la page et l'utiliser dans le même onglet / fenêtre sans avoir besoin d'en ouvrir un autre.
la source
Réponses:
Étrange, cela fonctionne comme ça hors de la boîte sur mon Debian. Essayez de l'exécuter en arrière-plan:
Vous pouvez en faire une fonction en ajoutant ces lignes à votre
~/.bashrc
fichier:Vous pouvez ensuite simplement exécuter
open http://www.google.com
et il s'exécutera en arrière-plan.la source
open
, (ie open = 'xdg-open') y a-t-il un moyen d'obtenir la fonctionnalité dexdg-open <url> &
sans utiliser de fonction shell?Si vous souhaitez détacher le processus du shell actuel plutôt que de le démarrer en tâche de fond avec
xdg-open http://www.google.com &
, j'aime l'detach
utilitaire:On pourrait créer un alias pour cela. J'aime
detach
plusnohup
que ferme stdin stdout et stderr par défaut donc son invocation est plus propre.la source
detach
ne semble pas exister dans ma distribution.nohup
lance le processus, mais occupe toujours la fenêtre du terminal.detach
n'est pas non plus dans ma distribution; mais python peut gérer l' ouverture des URL et détacher:python -m webbrowser -t "http://example.com"
. Cela devrait fonctionner dès le départ sur presque toutes les distributions quelque peu récentes de Linux.detach
ne soit même pas dans l'AUR, il s'est avéré facile à installer à partir de la source et était en outre le seul programme qui a atteint ce que je voulais. (les alternatives répertoriées ici et sur ledetach
site Web ne permettent pas de fermer le shell tant qu'ilxdg-open
est en cours d'exécution, ou du moinsdetach
n'ont pas fait me plaindre mon shell)xdg-open
attend la fin du programme. C'est par conception. Si le programme est un programme en mode texte, il doit rester au premier plan dans le terminal. Même si le programme est une interface graphique, ce comportement est utile dans le cas où ilxdg-open
est utilisé à partir d'un script et que le script souhaite effectuer quelque chose après que le fichier a été modifié (par exemple, envoyer la nouvelle version quelque part ou faire quelque chose avec la nouvelle version).Si vous ne voulez pas attendre, lancez-vous
xdg-open
en arrière-plan. Vous pouvez exécuter n'importe quelle commande shell en arrière-plan en mettant une esperluette à la fin.Avec certains programmes,
xdg-open
revient immédiatement. Ce qui se passe, c'est que le programme quixdg-open
invoque revient immédiatement. Cela se produit généralement avec les programmes GUI qui ouvrent tous les fichiers dans une seule instance: lorsque vous les démarrez une deuxième fois, ils envoient un message à l'instance en cours d'exécution pour lui dire d'ouvrir le fichier et de quitter immédiatement.la source
xdg-open
revient immédiatement (je peux le confirmer sur Ubuntu 16.04), mais le programme qu'il appelle peut passer en arrière-plan. Par exemple, sur mon système,xdg-open
appelle Evince pour les fichiers PDF;evince foo.pdf
bloque jusqu'à ce que vous fermiez le fichier PDF, sauf si le PDF est déjà ouvert, auquel cas le deuxièmeevince
processus démarré parxdg-open
concentre l'instance existante et se ferme.xdg-open
n'a aucun contrôle sur cela, à moins qu'il n'y ait un moyen de faire en sorte que le programme garde un processus en cours.En combinant la réponse de terdon et la discussion de Dan D. sur
nohup
j'ai créé une fonction qui fait exactement ce que je veux:J'ai ajouté ceci à mon
.bashrc/.zshrc
dossier:Pour une explication de
/dev/null 2>&1
voir cette discussion sur la dissimulationstdout
etstderr
.la source
Essaye ça:
J'utilise cette technique pour mettre en file d'attente les URL magnet: // dans mon client Bit Torrent Vuze.
Les guillemets simples aident à protéger le contenu des URL afin que le shell ne tente pas de les interpréter.
la source
xdg-open
? Il semble que plusieurs des répondants ici ont indiqué que le comportement normal est que le contrôle est retourné au terminal après un certain temps.Si vous devez ouvrir des pages Web à partir de la ligne de commande (boucle), vous pouvez simplement ouvrir le navigateur avant de démarrer le script.
Dans ce cas, il n'attend pas la fermeture du navigateur après le premier lien, mais les ouvre tous dans de nouveaux onglets.
la source
Comme aujourd'hui, aucune de ces options n'a fonctionné pour moi. Je suis parfaitement conscient que l'OP a dit "utiliser xdg-open", désolé à l'avance.
J'ai fini par faire un simple mort
chrome https://google.es --new-window || chromium https://google.es --new-window || firefox https://google.es
.Si vous n'avez aucun de ces 3 navigateurs, n'hésitez pas à utiliser les bons avec votre préférence de commande.
Remarque: Firefox a ouvert une nouvelle fenêtre sans rien ajouter. Le cas ne fonctionne pas parfaitement pour vous, utilisez
firefox https://google.es -new-instance -new-window
. Notez que ce n'est qu'un-
pour les drapeaux Firefox.la source
désavouer est la bonne commande pour cela.
J'utilise 2 fonctions pour cela, afin de le garder plus lisible.
la source
disown
n'empêche pas l'envoi d'erreurs au terminal.