Skip to content

Instantly share code, notes, and snippets.

@defunkt
Created March 1, 2010 10:01
Show Gist options
  • Select an option

  • Save defunkt/318247 to your computer and use it in GitHub Desktop.

Select an option

Save defunkt/318247 to your computer and use it in GitHub Desktop.
pipe html to a browser
#!/bin/sh -e
#
# Usage: browser
# pipe html to a browser
# e.g.
# $ echo '<h1>hi mom!</h1>' | browser
# $ ron -5 man/rip.5.ron | browser
if [ -t 0 ]; then
if [ -n "$1" ]; then
open $1
else
cat <<usage
Usage: browser
pipe html to a browser
$ echo '<h1>hi mom!</h1>' | browser
$ ron -5 man/rip.5.ron | browser
usage
fi
else
f="/tmp/browser.$RANDOM.html"
cat /dev/stdin > $f
open $f
fi
@kennethreitz

Copy link
Copy Markdown

Installation:

brew install browser

Or, if you must:

 sudo curl https://gist.github.com/raw/318247/browser -o /usr/local/bin/browser
 sudo chmod +x /usr/local/bin/browser

@jocap

jocap commented Nov 10, 2010

Copy link
Copy Markdown

Just in case anyone can't figure this out:
TextMate command:
cat $TM_FILE | /usr/local/bin/browser

@rleber

rleber commented Dec 11, 2010

Copy link
Copy Markdown

Small point, but "...hi mom!..." should be '...hi mom!...' in the usage example in the comments. Strong quoting is needed to avoid the dreaded "bash: !: event not found" error.

ghost commented Feb 8, 2011

Copy link
Copy Markdown

/Users/humza/homebrew/bin/browser: line 2: syntax error near unexpected token '<'
'Users/humza/homebrew/bin/browser: line 2: '<title>301 Moved Permanently</title>' I get this for some reason

@codeinthehole

Copy link
Copy Markdown

The URL for installation should be https:

sudo curl https://gist.github.com/raw/318247/browser -o /usr/local/bin/browser
sudo chmod +x /usr/local/bin/browser

ghost commented May 31, 2011

Copy link
Copy Markdown

or with zsh, it is
open =(echo '<h1>zsh rulez!</h1>')

=(foo) takes the output of foo, writes it into a file in /tmp and returns the files path.

@phistep

phistep commented May 29, 2013

Copy link
Copy Markdown

In bash you can do <(foo) to achieve the same as zsh's =(foo). But it doesn't work with the open(1) utility for me. How should it figure out the file type anyway?

@Zeokat

Zeokat commented Mar 9, 2014

Copy link
Copy Markdown

Zeokat usefull piece of code.

@geoff-nixon

Copy link
Copy Markdown

Try

:; I="$(basename $0)"; [ -z $BROWSER ] && open=open || open=$BROWSER

[ $# -eq 0 ] && set -- -; [ "$1" = "-" ] && [ -t 0 ] &&
  echo "Usage: [ COMMAND | $I ] | [ $I < FILE ] | [ $I FILE ... ]" >&2 && exit

for what; do where="/tmp/$(od -N2 < /dev/urandom | openssl dgst -sha1).html"
  cat "$what" > "$where" && $open "$where"; sleep 1 && rm -f "$where" & done

Some advantages:

  • Respect $BROWSER. Can be BROWSER=lynx, BROWSER='open -a Firefox', etc.
  • No bashisms ($RANDOM) or zsh-isms (=(...)).
  • Correctly handles arguments that do not end in .html.
  • Correctly handles multiple arguments and shell globs.
  • Cleans up after itself.
  • Doesn't even need a shebang!

Or, you might prefer what I use: avoid leaving your terminal at all, and:

cat "$what" > "$where" && qlmanage -p "$where" >/dev/null 2>&1; sleep 1 ...

@Boldewyn

Copy link
Copy Markdown

To show Markdown files in browsers, I found a way without temporary files: https://gist.github.com/Boldewyn/4311962

It uses data: URIs for fun and profit:

x-www-browser $(base64 -w0 | cat <(echo -n 'data:text/html;base64,') -)
#  ^--- Debian link to default browser
#               ^---- base64 slurps stdin as default
#                            ^--- concat the "data:" header, then the content

@csonuryilmaz

Copy link
Copy Markdown

It's still working after ~10 years. 😊 Thanks!

Installed with brew install browser πŸ‘‰ Tested on MacOS Mojave 10.14.6 πŸ‘

@benwoodward

Copy link
Copy Markdown

Works perfectly! Thanks Chris. Oh.. and thanks for making Github! πŸ™‚

@iMichka

iMichka commented May 27, 2021

Copy link
Copy Markdown

Small heads up for an improvement: open can be replaced by xdg-open to make this work on Linux. Maybe the script could detect if it is used on Mac/Linux and use the correct command based on that.

@ernstki

ernstki commented Sep 24, 2022

Copy link
Copy Markdown

Small heads up for an improvement: open can be replaced by xdg-open to make this work on Linux. Maybe the script could detect if it is used on Mac/Linux and use the correct command based on that.

Here's @geoff-nixon's version as a standalone Bash script, with support already baked in for Quick Look or some other previewer. Requires bash to be somewhere in the search path if you're on Mac; should mostly work on Linux, too.

@bfontaine

Copy link
Copy Markdown

Note this was removed from Homebrew in January.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment