Cara bersih untuk meluncurkan browser web dari skrip shell?


101

Dalam skrip bash, saya perlu meluncurkan browser web pengguna. Tampaknya ada banyak cara untuk melakukan ini:

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

Apakah ada cara yang lebih standar daripada yang lain untuk melakukan ini yang akan berfungsi di sebagian besar platform, atau haruskah saya menggunakan sesuatu seperti ini:

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

Solusi Anda tampaknya baik-baik saja bagi saya
Jamie Wong

Ya, meskipun saya akan menukar xdg-open dan gnome-open
ninjalj

4
Berhati-hatilah dengan URL Anda. Sangat mudah untuk mendapatkan karakter suka ?atau &ada yang perlu dikutip.
Gabe

Anda seharusnya dapat membatalkan eval(ini risiko keamanan):$BROWSER http://wwww.google.com
Dijeda hingga pemberitahuan lebih lanjut.

Ada juga sensible-browser.
Siput mekanik

Jawaban:


71

xdg-open distandarisasi dan harus tersedia di sebagian besar distribusi.

Jika tidak:

  1. eval itu jahat, jangan gunakan itu.
  2. Kutip variabel Anda.
  3. Gunakan operator tes yang benar dengan cara yang benar.

Berikut ini contohnya:

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

Mungkin versi ini sedikit lebih baik (masih belum teruji):

#!/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 ya tentu saja. Terima kasih. (Pertama, saya ingin menggunakan -sopsi ini, tetapi tampaknya itu tidak ada di Linux.)
Philipp


2
Saya melakukan minus satu karena mengatakan eval itu jahat. Ini bash, bukan javascript. Frasa penangkap tidak dibawa ke seluruh bahasa pemrograman.
Darth Egregious

3
kecuali itu tidak tersedia di OSX
gka

1
Penggunaan bash yang indah (versi ke-2)! belajar sesuatu yang baru hari ini.
patah

96
python -mwebbrowser http://example.com

berfungsi di banyak platform


3
Jika pengguna menginstal Python ... Tapi terima kasih telah menyebutkan webbrowsermodulnya!
nicoulaj

2
@JulienNicoulaud Saya baru saja menginstal debian dan python ada di sana. Saya pikir itu dibundel dengan banyak distribusi linux.
Tomáš Zato - Kembalikan Monica

Ini adalah modul yang bagus, tetapi tampaknya tidak berfungsi dengan file lokal. Ini akan menjadi kasus penggunaan umum saat melakukan pengembangan web.
Hexatonik

3
@Hexatonic: Ini berfungsi dengan file lokal misalnya,python -m webbrowser file:///usr/share/doc/python/FAQ.html
jfs

56

OSX:

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

atau

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

atau hanya ...

$ open some_url

11
Itu juga tidak terlalu portabel, tapi ya, begitulah cara Anda melakukannya di OSX.
tripleee

2
Pertanyaannya mengatakan "di sebagian besar platform"!
Siput mekanik

9
Beberapa dari kita menggunakan OSX, jadi jawaban ini berguna.

15

Anda bisa menggunakan yang berikut ini:

x-www-browser

Itu tidak akan menjalankan pengguna melainkan browser X default sistem.

Lihat: utas ini.


x-www-browser <url>melakukan pekerjaan dengan sangat baik!
Basster

4
Tidak ada di Mac OS.
jamescampbell

4
Lol, saya baru saja datang ke sini untuk mengomentari ini dan melihat bahwa diri saya sebelumnya telah mengomentarinya tahun lalu. Ini adalah beberapa matriks / permulaan.
jamescampbell

0

Mengambil jawaban lain dan membuat versi yang berfungsi untuk semua OS utama serta memeriksa untuk memastikan bahwa URL diteruskan sebagai variabel run-time:

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

Ini mungkin tidak berlaku tepat untuk apa yang ingin Anda lakukan, tetapi ada cara yang sangat mudah untuk membuat dan meluncurkan server menggunakan http-serverpaket npm .

Setelah terinstal (baru npm install http-server -g) Anda bisa meletakkan

http-server -o

di skrip bash Anda dan itu akan meluncurkan server dari direktori saat ini dan membuka browser ke halaman itu.


3
Ini npmharus diinstal + http-serverpaket + meluncurkan server web yang tidak dibutuhkan ...
nicoulaj

1
Jika Anda akan menggunakan npm, ada paket yang disebut open, tetapi masih berlebihan
Matt Fletcher
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.