One way is to generate unique file pathnames for 2 named pipes and, somehow, make them known to 2 processes; then have them open the named pipes to exchange characters. Let’s say a parent process executes a child process and we use environment variables to make the pathnames known to the child.
The parent can look like this:
mbfl_file_enable_remove mbfl_process_enable declare -r CHILD=/path/to/child.bash # Export these variables so the child sees them. declare -rx FIFO_PARENT_TO_CHILD=/path/to/fifo-parent-to-child.$RANDOM declare -rx 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 { 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 exit_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 exit_failure fi if mbfl_fd_open_input_output $FD_PARENT_TO_CHILD "$FIFO_PARENT_TO_CHILD" then mbfl_location_handler "mbfl_fd_close $FD_PARENT_TO_CHILD" else mbfl_location_leave exit_failure fi if mbfl_fd_open_input_output $FD_CHILD_TO_PARENT "$FIFO_CHILD_TO_PARENT" then mbfl_location_handler "mbfl_fd_close $FD_CHILD_TO_PARENT" else mbfl_location_leave exit_failure fi if mbfl_program_execbg 0 1 "$mbfl_PROGRAM_BASH" "$FIFO_SCRIPT" then mbfl_location_handler "mbfl_process_wait $mbfl_program_BGPID" else mbfl_location_leave exit_failure fi printf 'ciao child\n' >&$FD_PARENT_TO_CHILD read -u $FD_CHILD_TO_PARENT } mbfl_location_leave
The child can look like this:
declare -r FIFO_PARENT_TO_CHILD=$FIFO_PARENT_TO_CHILD declare -r FIFO_CHILD_TO_PARENT=$FIFO_CHILD_TO_PARENT declare -ri FD_PARENT_TO_CHILD=4 declare -ri FD_CHILD_TO_PARENT=5 mbfl_location_enter { if mbfl_fd_open_input_output $FD_PARENT_TO_CHILD "$FIFO_PARENT_TO_CHILD" then mbfl_location_handler "mbfl_fd_close $FD_PARENT_TO_CHILD" else mbfl_location_leave exit_failure fi if mbfl_fd_open_input_output $FD_CHILD_TO_PARENT "$FIFO_CHILD_TO_PARENT" then mbfl_location_handler "mbfl_fd_close $FD_CHILD_TO_PARENT" else mbfl_location_leave exit_failure fi read -u $FD_PARENT_TO_CHILD printf 'ciao parent\n' >&$FD_CHILD_TO_PARENT } mbfl_location_leave
This document describes version 3.0.0-devel.9 of Marcos Bash Functions Library.