[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: question and/or enhancement request
From: |
Dave Rutherford |
Subject: |
Re: question and/or enhancement request |
Date: |
Sun, 29 Jul 2007 18:36:08 -0400 |
On 7/29/07, Erick Wodarz <ewodarz@gmail.com> wrote:
> I think the following is hard (or impossible?) using bash. I want to
> create a shell script that will ...
This may be possible, depending on exactly what you need,
but you'd probably be better off trying `expect'.
#!/bin/bash
mknod pipe_to_bash p
mknod pipe_to_prog p
# 1. Execute a program asynchronously, and return it's PID.
# awk program to multiply by 2, output in bash commands
awk '{ print "echo", 2 * $1 ";"}' < pipe_to_prog > pipe_to_bash &
childpid=$!
echo awk is $childpid, this bash is $$
# 2. Have the program read stdin from the shell's current stdout
# (if you write instead
# exec 9>&1 < pipe_to_bash > pipe_to_prog,
# both programs will block)
exec 9>&1 > pipe_to_prog < pipe_to_bash
# give awk some input
echo 5
echo 6
echo 7
exec >&9 # closes pipe_to_prog (reconnecting original stdout)
# to trigger awk to read input
# 3. Have the program read write stdout to the shell's current stdin
# (You meant not to say "read", right?)
# read the commands output by awk from stdin
eval `while read w; do echo "$w"; done`
# (". -" would be better here... if it worked.
# Also tried ". /dev/stdin" without luck.)
rm pipe_to_bash pipe_to_prog
# Dave