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: > > #!/bin/bash > > 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 > . > esac > > 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 ] then piped=`cat` echo "From pipe: $piped" else echo "From parameter: $1" fi 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? Thanks Olle -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]