Date: Fri, 21 Sep 2001 14:50:29 -0400
From: "Jason M. Felice" <jfelice@cronosys.com>
To: bash-maintainers@gnu.org, chet@po.cwru.edu
Subject: Bash co-processes functions
Message-ID: <20010921145029.A6093@argo.eraserhead.net>
Mime-Version: 1.0

Attached to this message you will find coprocess.bash and coshell.bash.
Here's a brief synopsis of use:

coprocess open telnet localhost
while coprocess read il ; do
  echo "$il"
  case "$il" in
    *ogin:*)
      coprocess print 'user'
      ;;
    *ord:*)
      echo 'pass' |coprocess print --stdin
      ;;
    *$ *)
      coprocess print 'exit'
      break
      ;;
  esac
done
coprocess close

And here's an example of the coshell function:

coshell open ssh -l root otherbox
coshell eval hostname
coshell ls -l
if coshell test -d /tmp ; then echo 'otherbox has a /tmp!' ; fi

coshell sendfile /var/lib/upgrade.rpm /tmp/test.rpm || exit $?
coshell eval rpm -ivh /tmp/test.rpm || exit $?
coshell eval rm -f /tmp/test.rpm || exit $?
coshell close
exit 0

There are a few minor issues that I'd like to work out, but it works well
enough for me ;-)  The issues are:

- Shell quoting issue with 'coshell eval' commands - need to somehow
  re-quote words.
- Interactive commands hang 'coshell eval', tried redirecting in </dev/null
  to executed command, but it caused strange shell exit problems.
- Some way to copy stdin from local coshell eval to remote shell.  Probably
  logically impossible, but would be wonderfully useful.

I'm using it for writing scripts to publish websites and other scripts to
co-located servers.
