Чистый способ запуска веб-браузера из сценария оболочки?


в bash-скрипт, мне нужно, чтобы запустить веб-браузер пользователя. Кажется, есть много способов сделать это:

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

5 ответов:

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=
[[ -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

Он не будет работать пользователь, а браузер по умолчанию.

посмотреть: этой теме.

Это может не относиться в точности к тому, что вы хотите сделать, но есть очень простой способ создать и запустить сервер с помощью http-server npm package.

после установки (просто npm install http-server -g) можно поставить

http-server -o

в вашем скрипте bash, и он запустит сервер из текущего каталога и откроет браузер на этой странице.