วิธีที่สะอาดในการเปิดเว็บเบราว์เซอร์จากเชลล์สคริปต์?


103

ในสคริปต์ทุบตีฉันต้องเปิดเว็บเบราว์เซอร์ของผู้ใช้ ดูเหมือนจะมีหลายวิธีในการทำสิ่งนี้:

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

มีวิธีที่เป็นมาตรฐานมากกว่าวิธีอื่นในการทำเช่นนี้ที่ใช้ได้กับแพลตฟอร์มส่วนใหญ่หรือไม่หรือฉันควรทำสิ่งนี้:

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

ทางออกของคุณดูเหมือนจะดีสำหรับฉัน
เจมี่หว่อง

ใช่แม้ว่าฉันจะสลับ xdg-open และ gnome-open
ninjalj

4
ระมัดระวังเกี่ยวกับ URL ของคุณ ง่ายมากที่จะได้ตัวละครที่เหมือน?หรือ&อยู่ในนั้นที่ต้องยกมา
Gabe

คุณควรจะสามารถทิ้งeval(ซึ่งเป็นความเสี่ยงด้านความปลอดภัย):$BROWSER http://wwww.google.com
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบอีกครั้ง

sensible-browserนอกจากนี้ยังมี
หอยทาก

คำตอบ:


72

xdg-open เป็นมาตรฐานและควรมีอยู่ในการแจกแจงส่วนใหญ่

มิฉะนั้น:

  1. eval ชั่วร้ายอย่าใช้มัน
  2. อ้างตัวแปรของคุณ
  3. ใช้ตัวดำเนินการทดสอบที่ถูกต้องด้วยวิธีที่ถูกต้อง

นี่คือตัวอย่าง:

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

เวอร์ชั่นนี้อาจจะดีกว่าเล็กน้อย (ยังไม่ทดลอง):

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

โอ้ใช่แน่นอน ขอบคุณ. (ก่อนอื่นฉันต้องการใช้-sตัวเลือกนี้ แต่ดูเหมือนจะไม่มีใน Linux)
Philipp


2
ฉันลบหนึ่งเพราะบอกว่า eval นั้นชั่วร้าย นี่คือทุบตีไม่ใช่จาวาสคริปต์ วลีที่จับใจความไม่ได้ใช้ข้ามภาษาโปรแกรม
Darth Egregious

3
ยกเว้นว่าไม่มีใน OSX
gka

1
การใช้ bash ที่สวยงาม (รุ่นที่ 2)! ได้เรียนรู้สิ่งใหม่ ๆ ในวันนี้
Brokenfoot

96
python -mwebbrowser http://example.com

ทำงานบนหลายแพลตฟอร์ม


3
หากผู้ใช้ติดตั้ง Python ... แต่ขอขอบคุณที่กล่าวถึงwebbrowserโมดูล!
nicoulaj

2
@JulienNicoulaud ฉันเพิ่งติดตั้ง debian และ python อยู่ที่นั่น ฉันคิดว่ามันมาพร้อมกับการแจกแจงลินุกซ์จำนวนมาก
Tomáš Zato - คืนสถานะ Monica

เป็นโมดูลที่ดี แต่ดูเหมือนจะใช้กับไฟล์ในเครื่องไม่ได้ นี่จะเป็นกรณีการใช้งานทั่วไปเมื่อทำการพัฒนาเว็บ
Hexatonic

3
@Hexatonic: มันทำงานกับไฟล์ในเครื่องเช่นpython -m webbrowser file:///usr/share/doc/python/FAQ.html
jfs

58

OSX:

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

หรือ

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

หรือเพียงแค่ ...

$ open some_url

11
แทบจะไม่พกพาเลย แต่ใช่นั่นคือวิธีที่คุณทำบน OSX
tripleee

2
คำถามบอกว่า "บนแพลตฟอร์มส่วนใหญ่"!
หอยทาก

10
พวกเราบางคนใช้ OSX ดังนั้นคำตอบนี้จึงมีประโยชน์

15

คุณสามารถใช้สิ่งต่อไปนี้:

x-www-browser

จะไม่เรียกใช้ผู้ใช้ แต่เป็นเบราว์เซอร์ X เริ่มต้นของระบบ

ดู: หัวข้อนี้


x-www-browser <url>ทำงานได้ดีมาก!
Basster

4
ไม่มีอยู่ใน Mac OS
jamescampbell

4
ฮ่า ๆ ฉันเพิ่งมาที่นี่เพื่อแสดงความคิดเห็นเกี่ยวกับเรื่องนี้และเห็นว่าตัวเองก่อนหน้านี้ของฉันได้แสดงความคิดเห็นไว้เมื่อปีที่แล้ว นี่คือเมทริกซ์ / การเริ่มต้นบางอย่าง
jamescampbell

0

รับคำตอบอื่น ๆ และสร้างเวอร์ชันที่ใช้งานได้กับระบบปฏิบัติการหลักทั้งหมดรวมทั้งตรวจสอบเพื่อให้แน่ใจว่า URL ถูกส่งเป็นตัวแปรรันไทม์:

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

นี้อาจใช้ไม่ได้ตรงกับสิ่งที่คุณต้องการจะทำ แต่มีวิธีที่ง่ายมากที่จะสร้างและเปิดตัวเซิร์ฟเวอร์โดยใช้แพคเกจhttp-server NPM

เมื่อติดตั้งแล้ว (เพียงnpm install http-server -g) คุณสามารถใส่

http-server -o

ในสคริปต์ทุบตีของคุณและมันจะเปิดเซิร์ฟเวอร์จากไดเรกทอรีปัจจุบันและเปิดเบราว์เซอร์ไปที่หน้านั้น


3
สิ่งนี้จำเป็นต้องnpmติดตั้ง + http-serverแพ็คเกจ + เปิดตัวเว็บเซิร์ฟเวอร์ที่ไม่จำเป็น ...
nicoulaj

1
หากคุณจะใช้ npm มีแพ็คเกจที่เรียกว่าopenแต่ก็ยังใช้งานมากเกินไป
Matt Fletcher
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.