Cách sạch để khởi chạy trình duyệt web từ tập lệnh shell?


101

Trong một tập lệnh bash, tôi cần khởi chạy trình duyệt web của người dùng. Có vẻ như có nhiều cách để làm điều này:

  • $BROWSER
  • xdg-open
  • gnome-open trên GNOME
  • www-browser
  • x-www-browser
  • ...

Có cách nào tiêu chuẩn hơn những cách khác để làm điều này có thể hoạt động trên hầu hết các nền tảng không, hay tôi chỉ nên làm với một cái gì đó như thế này:

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

Giải pháp của bạn có vẻ tốt đẹp đối với tôi
Jamie Wong

Yep, mặc dù tôi muốn hoán đổi xdg mở và gnome-mở
ninjalj

4
Hãy cẩn thận về các URL của bạn. Thật dễ dàng để có được một nhân vật giống ?hoặc &trong đó cần được trích dẫn.
Gabe

Bạn sẽ có thể bỏ eval(đó là một rủi ro bảo mật):$BROWSER http://wwww.google.com
Tạm dừng cho đến khi có thông báo mới.

Còn sensible-browsernữa.
Ốc cơ

Câu trả lời:


71

xdg-open được tiêu chuẩn hóa và nên có sẵn trong hầu hết các bản phân phối.

Nếu không thì:

  1. eval là ác, không sử dụng nó.
  2. Trích dẫn các biến của bạn.
  3. Sử dụng các toán tử kiểm tra chính xác theo cách chính xác.

Đây là một ví dụ:

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

Có thể phiên bản này tốt hơn một chút (vẫn chưa được kiểm tra):

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

Ồ vâng tất nhiên rồi. Cảm ơn. (Trước tiên tôi muốn có thể thích sử dụng các -stùy chọn, nhưng điều đó dường như không tồn tại trên Linux.)
Philipp


2
Tôi đã làm một điểm trừ vì nói eval là ác. Đây là bash, không phải javascript. Các cụm từ bắt không mang trong các ngôn ngữ lập trình.
Darth Egrerious

3
ngoại trừ nó không có sẵn trong OSX
gka

1
Sử dụng bash đẹp (phiên bản thứ 2)! đã học được điều gì đó mới hôm nay.
breakfoot

96
python -mwebbrowser http://example.com

hoạt động trên nhiều nền tảng


3
Nếu người dùng đã cài đặt Python ... Nhưng cảm ơn bạn đã đề cập đến webbrowsermô-đun!
nicoulaj

2
@JulienNicoulaud Tôi vừa cài đặt debian và python ở đó. Tôi nghĩ rằng nó được đóng gói với nhiều bản phân phối linux.
Tomáš Zato - Phục hồi Monica

Đó là một mô-đun đẹp, nhưng có vẻ như nó không hoạt động với các tệp cục bộ. Đây sẽ là một trường hợp sử dụng phổ biến khi phát triển web.
Hexatonic

3
@Hexatonic: Nó hoạt động với các tệp cục bộ, ví dụ:python -m webbrowser file:///usr/share/doc/python/FAQ.html
jfs

56

OSX:

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

hoặc là

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

hoặc đơn giản...

$ open some_url

11
Điều đó cũng khó di động lắm, nhưng vâng, đó là cách bạn thực hiện trên OSX.
tripleee

2
Câu hỏi cho biết "trên hầu hết các nền tảng"!
Ốc cơ học

9
Một số người trong chúng ta đang sử dụng OSX, vì vậy câu trả lời này rất hữu ích.

15

Bạn có thể sử dụng như sau:

x-www-browser

Nó sẽ không chạy trình duyệt X mặc định của người dùng.

Xem: chủ đề này.


x-www-browser <url>làm công việc rất tốt!
Basster

4
Không tồn tại trong Mac OS.
jamescampbell

4
Lol, tôi chỉ vào đây để bình luận về điều này và thấy rằng chính người trước của tôi đã nhận xét về nó vào năm ngoái. Đây là một số công cụ ma trận / khởi đầu.
jamescampbell

0

Lấy các câu trả lời khác và tạo một phiên bản hoạt động cho tất cả các hệ điều hành chính cũng như kiểm tra để đảm bảo rằng URL được chuyển vào dưới dạng biến thời gian chạy:

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

Điều này có thể không áp dụng chính xác cho những gì bạn muốn làm, nhưng có một cách thực sự dễ dàng để tạo và khởi chạy một máy chủ bằng cách sử dụng http-servergói npm .

Sau khi cài đặt (chỉ npm install http-server -g), bạn có thể đặt

http-server -o

trong tập lệnh bash của bạn và nó sẽ khởi chạy một máy chủ từ thư mục hiện tại và mở trình duyệt đến trang đó.


3
Điều này đòi hỏi npmphải được cài đặt + http-servergói + ra mắt một máy chủ web không cần thiết ...
nicoulaj

1
Nếu bạn đang đi để sử dụng NPM, có một gói gọi open, nhưng nó vẫn còn quá mức cần thiết
Matt Fletcher
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.