Create a gist now

Instantly share code, notes, and snippets.

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
cat <<usage
Usage: browser
pipe html to a browser
$ echo '<h1>hi mom!</h1>' | browser
$ ron -5 man/rip.5.ron | browser
cat /dev/stdin > $f
open $f


brew install browser

Or, if you must:

 sudo curl -o /usr/local/bin/browser
 sudo chmod +x /usr/local/bin/browser

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


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.


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


The URL for installation should be https:

sudo curl -o /usr/local/bin/browser
sudo chmod +x /usr/local/bin/browser

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.


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 usefull piece of code.



:; 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 ...

To show Markdown files in browsers, I found a way without temporary files:

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment