干净的方式从shell脚本启动网页浏览器?

在一个bash脚本中,我需要启动用户的Web浏览器。 似乎有很多这样做的方法:

  • $BROWSER
  • xdg-open
  • 在GNOME上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是标准化的,应该在大多数发行版中可用。

除此以外:

  1. eval是邪恶的,不要使用它。
  2. 引用你的variables。
  3. 以正确的方式使用正确的testing操作员。

这里是一个例子:

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

也许这个版本稍好些(还没有经过testing):

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

在许多平台上工作

OSX:

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

要么

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

或者干脆…

 $ open some_url 

您可以使用以下内容:

 x-www-browser 

它不会运行用户,而是运行系统的默认X浏览器。

请参阅: 这个线程。

这可能不适用于你想要做的事情,但是有一个非常简单的方法来使用http-server npm包来创build和启动服务器。

一旦安装(只是npm install http-server -g ),你可以把

http-server -o

在你的bash脚本中,它将从当前目录启动一个服务器,并打开浏览器到该页面。