Un moyen propre de lancer le navigateur Web à partir du script shell?


101

Dans un script bash, je dois lancer le navigateur Web de l'utilisateur. Il semble y avoir plusieurs façons de procéder:

  • $BROWSER
  • xdg-open
  • gnome-open sur GNOME
  • www-browser
  • x-www-browser
  • ...

Existe-t-il un moyen plus standard que les autres de faire cela qui fonctionnerait sur la plupart des plates-formes, ou devrais-je simplement opter pour quelque chose comme ceci:

#/usr/bin/env bash

if [ -n $BROWSER ]; then
  $BROWSER 'http://wwww.google.com'
elif which xdg-open > /dev/null; then
  xdg-open 'http://wwww.google.com'
elif which gnome-open > /dev/null; then
  gnome-open 'http://wwww.google.com'
# elif bla bla bla...
else
  echo "Could not detect the web browser to use."
fi

Votre solution me semble bien
— Jamie Wong

Ouais, même si
— j'échangerais

4
Faites attention à vos URL. Il est facile d'obtenir un personnage comme ?ou &dedans qui doit être cité.
— Gabe

Vous devriez être en mesure de supprimer le eval(c'est un risque de sécurité):$BROWSER http://wwww.google.com
— pause jusqu'à nouvel ordre.

Il y a aussi sensible-browser.
— Escargot mécanique du

Réponses:


71

xdg-open est standardisé et devrait être disponible dans la plupart des distributions.

Autrement:

  1. eval est le mal, ne l'utilisez pas.
  2. Citez vos variables.
  3. Utilisez les bons opérateurs de test de la bonne manière.

Voici un exemple:

#!/bin/bash
if which xdg-open > /dev/null
then
  xdg-open URL
elif which gnome-open > /dev/null
then
  gnome-open URL
fi

Peut-être que cette version est légèrement meilleure (toujours non testée):

#!/bin/bash
URL=$1
[[ -x $BROWSER ]] && exec "$BROWSER" "$URL"
path=$(which xdg-open || which gnome-open) && exec "$path" "$URL"
echo "Can't find browser"

Oh oui bien sûr. Merci. (J'aurais d'abord aimé utiliser l' -soption, mais cela ne semble pas exister sous Linux.)
— Philipp


2
J'ai fait le moins un pour dire que eval est mauvais. Ceci est bash, pas javascript. Les phrases de capture ne sont pas transmises à travers les langages de programmation.
— Darth Egregious

3
sauf qu'il n'est pas disponible sous OSX
— gka

1
Belle utilisation de bash (2ème version)! appris quelque chose de nouveau aujourd'hui.
— brokenfoot

96
python -mwebbrowser http://example.com

fonctionne sur de nombreuses plateformes


3
Si l'utilisateur a installé Python ... Mais merci d'avoir mentionné le webbrowsermodule!
— nicoulaj

2
@JulienNicoulaud Je viens d'installer debian et python est là. Je pense qu'il est fourni avec de nombreuses distributions Linux.
— Tomáš Zato - Réintégrer Monica

C'est un bon module, mais il ne semble pas fonctionner avec les fichiers locaux. Ce serait un cas d'utilisation courant lors du développement Web.
— Hexatonic

3
@Hexatonic: Cela fonctionne avec les fichiers locaux, par exemple,python -m webbrowser file:///usr/share/doc/python/FAQ.html
— jfs

56

OSX:

$ open -a /Applications/Safari.app http://www.google.com

ou

$ open -a /Applications/Firefox.app http://www.google.com

ou simplement...

$ open some_url

11
Ce n'est guère très portable non plus, mais oui, c'est comme ça que vous le faites sur OSX.
— tripleee

2
La question dit "sur la plupart des plateformes"!
— Escargot mécanique du

9
Certains d'entre nous utilisent OSX, cette réponse est donc utile.

15

Vous pouvez utiliser les éléments suivants:

x-www-browser

Il n'exécutera pas l'utilisateur mais plutôt le navigateur X par défaut du système.

Voir: ce fil.


x-www-browser <url>fait très bien le travail!
— Basster

4
N'existe pas sous Mac OS.
— jamescampbell

4
Lol, je suis juste venu ici pour commenter cela et j'ai vu que mon ancien moi avait commenté l'an dernier. Ceci est un truc de matrice / création.
— jamescampbell

0

Prendre les autres réponses et créer une version qui fonctionne pour tous les principaux systèmes d'exploitation, ainsi que vérifier qu'une URL est transmise en tant que variable d'exécution:

#!/bin/bash
if [ -z $1 ]; then
  echo "Must run command with the url you want to visit."
  exit 1
else
  URL=$1
fi
[[ -x $BROWSER ]] && exec "$BROWSER" "$URL"
path=$(which xdg-open || which gnome-open) && exec "$path" "$URL"
if open -Ra "safari" ; then
  echo "VERIFIED: 'Safari' is installed, opening browser..."
  open -a safari "$URL"
else
  echo "Can't find any browser"
fi

-7

Cela peut ne pas s'appliquer exactement à ce que vous voulez faire, mais il existe un moyen très simple de créer et de lancer un serveur à l'aide du http-serverpackage npm .

Une fois installé (juste npm install http-server -g), vous pouvez mettre

http-server -o

dans votre script bash et il lancera un serveur à partir du répertoire actuel et ouvrira un navigateur sur cette page.


3
Cela nécessite npmd'être installé + http-serverpackage + lance un serveur Web inutile ...
— nicoulaj

1
Si vous allez utiliser npm, il y a un package appelé open, mais c'est toujours excessif
— Matt Fletcher
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.