Rendering HTML from a pipe
I would like to be able to generate HTML then pipe it to a program which will render it, something like this:
for i in 1 2 3
do
for j in a b c
do
echo "<table border="1"><tr><td>$i</td><td>$j</td></tr></table>"
done
done | /usr/bin/firefox
Unfortunately, firefox can't render data piped in from stdin. Neither can google-chrome. lynx
can, but who wants to use that?
I tried creating a named pipe, opening that in chrome and/or firefox and then piping data to that -- but the browser didn't update when I sent data through the named pipe.
Are there any non text-based browsers which will render html from stdin? The output doesn't need to be glitzy, I'm mostly interested in making delimited data a little more readable, on the fly.
Edit:
I tried using bash's process substitution, e.g. firefox <(sh /tmp/tablegen.sh)
, that didn't work either. Worst case scenario, I could output to a temp file, render, then delete, but I would prefer a slightly more elegant solution.
Solution 1:
From one of the answers on this question I found bcat
:
NAME
bcat - browser cat
DESCRIPTION
The bcat utility reads from standard input, or one or
more files, and pipes output into a web browser. file
may be '-', in which case standard input is concatenated
at that position.
When invoked as btee, all input is written immediately
to standard output in addition to being piped into
the browser.
Now I can run a script like this:
$ python foo.py | bcat
...and the resultant HTML output opens in a new Firefox tab!
On Ubuntu and other Debian-based Linux distributions you can install bcat
with this command:
$ sudo aptitude install ruby-bcat