[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Help needed piping output to a bash script



On 13 Jan 99 at 11:27, E.L. Meijer \(Eric\) <tgakem@sg10.chem.tue.nl> wrote:

> Um, yeah, it looks neater :)  I was just mindlessly copying the original
> poster's script.  Anyway, you actually still have one superfluous
> character there :)
> 
> cat > $TMPFILE
> 
> is enough, so that the entire  script becomes
> 
> #! /bin/bash
> 
> TMPFILE=/tmp/mymore.$$.tmp
> cat > $TMPFILE
> vi $TMPFILE < /dev/tty
> rm -f $TMPFILE

When I first read this I thought, "This is better too!", and couldn't remember 
why I'd done it the other way.  After testing it a bit, I found that there was 
a reason not to use 'cat' though:  I wanted the 'vl' program this was clipped 
from to be able to exit gracefully from having no parameters and no standard 
input, and 'cat' tended to wait for input.

So the idea was to have a 'read' loop that counts the lines, (I'm assuming 
the Hamm base distrib has left out 'wc' too), from standard input, and if there 
weren't any, to exit.  This doesn't work though, as 'read' waits for input just 
like 'cat'!

On the other hand, the ">>" was deliberate, as just prior to that snippet was a 
bit of code, (not posted of course), which added a header, (showing how to 
quit, what file was being viewed, or if it was standard input, with a few 
separator lines), and ">" would have zapped the header.

Still, all of this advice is very helpful, and if nobody objects, the above 
leads to the question of:  whether it's possible for a script, given no 
parameters, to know whether there's any standard input?  Or at least for it not 
bother with waiting for any input from the keyboard.

That is, I now have it so 'mycat', or 'vl' from which it's extracted from, can 
handle any of these invocations:
vl foo
vl < foo
vl --help
vl nosuchfile	# bails with an error message

But am presently stumped at how to handle:
vl

...while still keeping the above features.  At present this just outputs a 
blank line and waits till you hit Control-C.


Reply to: