Re: Reading input piped to a bash script
On Monday 18 October 2004 22.07, Sergio Basurto wrote:
> > Can anyone explain how I can read input to a bash
> > script through a pipe?
> You should use exec like the following simple example:
> exec 6<&0 # Link file descriptor #6 with stdin.
> read a1 # read if somethign comes from a pipe
> echo $a1 # print the output of the pipe.
> # you can make here the validation that you need if not
> then read $1
> case a1
> exec 0<&6 6<&- # restore stdin.
Hmm.. this doesn't seem to solve my problem because "read a1" will wait
for some input even if there is none. What I want is for the script to
*check* if there is any input being piped to the script, and if there
isn't then check the first parameter to the script. However, I am
starting to think that that is not possible. Maybe you have to do it the
other way around, check for a parameter first, and then simply assume
there is something on stdin. This works like that:
if [ $# == 0 ]
echo "From pipe: $piped"
echo "From parameter: $1"
The problem here is that if I don't provide any parameter to the script,
and I don't pipe anything to it, it prompts the user for input. What I
would like is an error message saying "wrong number of parameters" or
something. Is there a solution to my problem?