シェルスクリプトからWebブラウザーを起動するクリーンな方法?


101

bashスクリプトで、ユーザーのWebブラウザーを起動する必要があります。これを行うには多くの方法があるようです:

  • $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

あなたの解決策は私には問題ないと思われます
Jamie Wong

はい、ただしxdg-openとgnome-openを
入れ替え

4
URLに注意してください。引用する必要があるような文字?やその&中の文字を取得するのは簡単です。
Gabe

あなたがドロップすることができるはずeval(それはセキュリティ上のリスクがあります):$BROWSER http://wwww.google.com
追って通知があるまで一時停止しました。

もありsensible-browserます。
メカニカルカタツムリ

回答:


71

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は悪だと言ってマイナス1をしました。これはbashであり、javascriptではありません。キャッチフレーズは、プログラミング言語間で伝達されません。
Darth Egregious

3
それはOSXでは使用できません除いて
GKA

1
bashの美しい使い方(第2バージョン)!今日何か新しいことを学びました。
ブロークンフット2017

96
python -mwebbrowser http://example.com

多くのプラットフォームで動作します


3
ユーザーがPythonをインストールしている場合...しかし、webbrowserモジュールについて言及してくれてありがとう!
nicoulaj 2010年

2
@JulienNicoulaud debianをインストールしたところ、pythonがそこにあります。多くのLinuxディストリビューションにバンドルされていると思います。
トマーシュZato -復活モニカ

これは素晴らしいモジュールですが、ローカルファイルでは動作しないようです。これは、Web開発を行う場合の一般的な使用例です。
Hexatonic 2015年

3
@Hexatonic:ローカルファイルで機能します。例:python -m webbrowser file:///usr/share/doc/python/FAQ.html
jfs

56

OSX:

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

または

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

または単に...

$ open some_url

11
これも移植性はほとんどありませんが、そうです、OSXでそれを行う方法です。
トリプルリー

2
「ほとんどのプラットフォームで」という質問です。
メカニカルカタツムリ

9
一部の人はOSXを使用しているので、この回答は役に立ちます。

15

以下を使用できます。

x-www-browser

ユーザーではなく、システムのデフォルトのXブラウザを実行します。

参照:このスレッド。


x-www-browser <url>仕事はとてもうまくいきます!
バススター

4
Mac OSには存在しません。
jamescampbell 2018

4
笑、私はこれについてコメントするためにここに来たばかりで、私の前の自分が昨年それについてコメントしているのを見ました。これはいくつかのマトリックス/インセプションのものです。
jamescampbell

0

他の回答を取り、すべての主要なOSで機能するバージョンを作成し、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-servernpmパッケージを使用してサーバーを作成して起動する本当に簡単な方法があります

インストールしたら(ちょうどnpm install http-server -g)あなたは置くことができます

http-server -o

あなたのbashスクリプトでそれは現在のディレクトリからサーバーを起動し、そのページにブラウザを開きます。


3
これnpmをインストールする必要があります+ http-serverパッケージ+不要なWebサーバーを起動します...
nicoulaj

1
npmを使用する場合は、というパッケージがありますがopen、それでもやり過ぎです
Matt Fletcher
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.