-
-
Save defunkt/318247 to your computer and use it in GitHub Desktop.
#!/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 |
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: '<title>301 Moved Permanently</title>' I get this for some reason
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
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.
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 beBROWSER=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: 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
It's still working after ~10 years. 😊 Thanks!
Installed with brew install browser
👉 Tested on MacOS Mojave 10.14.6 👍
Works perfectly! Thanks Chris. Oh.. and thanks for making Github! 🙂
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.
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.
Note this was removed from Homebrew in January.
Installation:
Or, if you must: