man expect may simplify this task. However, be warned - people have
written books on expect alone!

Steve

On Tue, March 7, 2006 12:31 pm, chris bayley wrote:
> Hi team....
>
> I have been whipping up a wee bash script to empty out the photos of my
> digital camera to my storage device. It runs from ivman when the camera
> is plugged in and the idea was to have as little user intervention as
> possible. It started off as a small bash script that was all right if
> you were watching on a terminal, but not robust enough to run
> unsupervised.
> I have come unstuck when trying to deal with CLI programs that expect an
> input on stdin but give me a question on std{out/err} that has no
> linefeed.
> I have found it very tricky indeed to read stdout when there is no LF.
>
> Here is some example code:
>
> #/bin/bash
>
> # init some files and a pipe to play with
> touch file{1,2}
> mkfifo pipe1
>
> catch_question()
> {
> # with this read loop I would like to read from stdin (the std{out,err}
> from cp)
> # problem is with the 'file exists, overwrite (y|n)?' type questions a
> LF is often
> # not sent in order the the user input occurs on the same line.
> # hence 'read' seems unusable in this context ?
>     while read LINE
>     do
>         # if I find something of concern then I will do my own UI for
> the question?
>         if echo "$LINE"|egrep 'overwrite.+?' > /dev/null
>         then
>             if kdialog --yesno "$LINE" # your choice of UI here
>             then
>                 # and copy a response to the pipe for the blocked cp
>                 echo "y" > pipe1
>             else
>                 echo "n" > pipe1
>             fi
>         fi
>     done
> }
>
> # here I have a cp that complains of existing files
> # stderr and stdout are combined and piped to 'catch_question'
> # cp is expecting responses from the named pipe 'pipe1'
>
> cp -iv file1 file2 2>&1 < pipe1 | catch_question
>
> #clean up
> rm file1 file2 pipe1
>
>
>
> So, if anyone has some ideas about how to read 'incomplete' lines from
> stdin or approaches to the task above I'd love some new ideas.
> Meanwhile I'm off to 'man expect' - I may be some time!
>
> : )
> ChrisB
>


-- 
Let us have a moment of silence for all Americans who are now stuck in
traffic on their way to a health club to ride a stationary bicycle. -
Congressman Earl Blumenauer (Oregon)

Reply via email to