Another way is to generate unique file pathnames for 2 named pipes and, somehow, launch the
processes redirecting their standard input and output channels to the appropriate named pipes.
Let’s say a parent process executes a child process with mbfl_program_execbg().
The parent can look like this:
mbfl_file_enable_remove
mbfl_process_enable
function doit () {
declare -r CHILD=/path/to/child.bash
declare -r FIFO_PARENT_TO_CHILD=/path/to/fifo-parent-to-child.$RANDOM
declare -r FIFO_CHILD_TO_PARENT=/path/to/fifo-child-to-parent.$RANDOM
declare -ri FD_PARENT_TO_CHILD=4
declare -ri FD_CHILD_TO_PARENT=5
mbfl_location_enter
{
mbfl_declare_varref(OUTER_HOOK)
mbfl_location_hook_var _(OUTER_HOOK)
sub_doit
printf 'ciao child\n' >&$FD_PARENT_TO_CHILD
read -u $FD_CHILD_TO_PARENT
}
mbfl_location_leave
}
function sub_doit () {
mbfl_location_enter
{
if mbfl_exec_mkfifo --mode=0600 -- "$FIFO_PARENT_TO_CHILD"
then mbfl_location_handler "mbfl_file_remove '$FIFO_PARENT_TO_CHILD'"
else
mbfl_location_leave
return_failure
fi
if mbfl_exec_mkfifo --mode=0600 -- "$FIFO_CHILD_TO_PARENT"
then mbfl_location_handler "mbfl_file_remove '$FIFO_CHILD_TO_PARENT'"
else
mbfl_location_leave
return_failure
fi
if mbfl_fd_open_input_output $FD_PARENT_TO_CHILD "$FIFO_PARENT_TO_CHILD"
then mbfl_hook_add $OUTER_HOOK "mbfl_fd_close $FD_PARENT_TO_CHILD"
else
mbfl_location_leave
return_failure
fi
if mbfl_fd_open_input_output $FD_CHILD_TO_PARENT "$FIFO_CHILD_TO_PARENT"
then mbfl_hook_add $OUTER_HOOK "mbfl_fd_close $FD_CHILD_TO_PARENT"
else
mbfl_location_leave
return_failure
fi
if mbfl_program_execbg $FD_PARENT_TO_CHILD $FD_CHILD_TO_PARENT "$mbfl_PROGRAM_BASH" "$CHILD"
then mbfl_hook_add $OUTER_HOOK "mbfl_process_wait $mbfl_program_BGPID"
else
mbfl_location_leave
return_failure
fi
# We have connected both the ends of both the FIFOs, so we can remove them from the file
# system: the FIFOs will continue to exist until the file descriptors are closed.
}
mbfl_location_leave
}
The child can look like this:
function main () {
read
printf 'ciao parent\n'
}
This document describes version 3.0.0-devel.9 of Marcos Bash Functions Library.