Sauberer Weg, um den Webbrowser von Shell-Skript zu starten?


101

In einem Bash-Skript muss ich den Benutzer-Webbrowser starten. Es scheint viele Möglichkeiten zu geben, dies zu tun:

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

Gibt es eine Standardmethode als die anderen, die auf den meisten Plattformen funktioniert, oder sollte ich einfach so etwas tun:

#/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

Ihre Lösung scheint mir in Ordnung zu sein
Jamie Wong

Ja, obwohl ich xdg-open und gnome-open tauschen würde
ninjalj

4
Seien Sie vorsichtig mit Ihren URLs. Es ist einfach, einen Charakter wie ?oder &dort zu finden, der zitiert werden muss.
Gabe

Sie sollten in der Lage sein, eval$BROWSER http://wwww.google.com
Folgendes zu löschen

Es gibt auch sensible-browser.
Mechanische Schnecke

Antworten:


71

xdg-open ist standardisiert und sollte in den meisten Distributionen verfügbar sein.

Andernfalls:

  1. eval ist böse, benutze es nicht.
  2. Zitieren Sie Ihre Variablen.
  3. Verwenden Sie die richtigen Testoperatoren auf die richtige Weise.

Hier ist ein Beispiel:

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

Vielleicht ist diese Version etwas besser (noch nicht getestet):

#!/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 ja natürlich. Vielen Dank. (Zuerst hätte ich gerne die -sOption verwendet, aber das scheint unter Linux nicht zu existieren.)
Philipp


2
Ich habe das Minus gemacht, weil ich gesagt habe, dass eval böse ist. Dies ist Bash, kein Javascript. Schlagworte sind nicht programmiersprachenübergreifend.
Darth Egregious

3
außer es ist nicht verfügbar in OSX
gka

1
Schöne Verwendung von Bash (2. Version)! habe heute etwas Neues gelernt.
gebrochener Fuß

96
python -mwebbrowser http://example.com

funktioniert auf vielen Plattformen


3
Wenn der Benutzer Python installiert hat ... Aber danke, dass Sie das webbrowserModul erwähnt haben!
Nicoulaj

2
@ JulienNicoulaud Ich habe gerade Debian installiert und Python ist da. Ich denke, es ist mit vielen Linux-Distributionen gebündelt.
Tomáš Zato - Wiedereinsetzung Monica

Es ist ein schönes Modul, aber es scheint nicht mit lokalen Dateien zu funktionieren. Dies ist ein häufiger Anwendungsfall bei der Webentwicklung.
Hexatonic

3
@ Hexatonic: Es funktioniert mit lokalen Dateien, zBpython -m webbrowser file:///usr/share/doc/python/FAQ.html
jfs

56

OSX:

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

oder

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

oder einfach...

$ open some_url

11
Das ist auch kaum sehr portabel, aber so macht man es unter OSX.
Tripleee

2
Die Frage lautet "auf den meisten Plattformen"!
Mechanische Schnecke

9
Einige von uns verwenden OSX, daher ist diese Antwort hilfreich.

15

Sie könnten Folgendes verwenden:

x-www-browser

Der Benutzer wird nicht ausgeführt, sondern der Standard-X-Browser des Systems.

Siehe: dieser Thread.


x-www-browser <url>macht den Job sehr gut!
Basster

4
Existiert nicht unter Mac OS.
Jamescampbell

4
Lol, ich bin gerade hierher gekommen, um dies zu kommentieren und habe gesehen, dass mein vorheriges Ich es letztes Jahr kommentiert hat. Dies ist ein Matrix / Inception-Zeug.
Jamescampbell

0

Nehmen Sie die anderen Antworten und erstellen Sie eine Version, die für alle gängigen Betriebssysteme funktioniert, und überprüfen Sie, ob eine URL als Laufzeitvariable übergeben wird:

#!/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

Dies trifft möglicherweise nicht genau auf das zu, was Sie tun möchten, aber es gibt eine wirklich einfache Möglichkeit, einen Server mit dem http-servernpm-Paket zu erstellen und zu starten .

Einmal installiert (nur npm install http-server -g) können Sie setzen

http-server -o

In Ihrem Bash-Skript wird ein Server aus dem aktuellen Verzeichnis gestartet und ein Browser für diese Seite geöffnet.


3
Dies muss npminstalliert sein + http-serverPaket + startet einen nicht benötigten Webserver ...
Nicoulaj

1
Wenn Sie npm verwenden wollen, gibt es ein Paket namens open, aber es ist immer noch übertrieben
Matt Fletcher
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.