da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# This software is part of the ast package #
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 1982-2010 AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# and is licensed under the #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Common Public License, Version 1.0 #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# by AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# A copy of the License is available at #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Information and Software Systems Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# AT&T Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Florham Park NJ #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# David Korn <dgk@research.att.com> #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# test the behavior of co-processes
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ -d /cygdrive ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit cygwin detected - coprocess tests disabled - enable at the risk of wedging your system
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin integer x=0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin do read -r
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprint -p "hello"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $line == hello ]] || err_exit 'coprocessing fails'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $line == 'hello again' ]] || err_exit 'coprocess after moving fds fails'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfor i in three four pipe four pipe four three pipe pipe three pipe
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin$file 2> /dev/null || err_exit "parent coprocess prevents script coprocess"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinread -t 5 -p
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinread -t 5 -p
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzthen err_exit "${SHELL-ksh} coprocess io failed -- got '$got', expected '$exp'"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzelse err_exit "coprocess hung after 'exec 5<&p 6>&p; exec 5<&- 6>&-'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit "read -p hanging (SECONDS=$SECONDS count=$count)"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz( sleep 3 |& sleep 1 && kill $!; sleep 1; sleep 3 |& sleep 1 && kill $! ) ||
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin{ : |& } 2>/dev/null ||
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin do print $i |&
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $r == $e ]] || err_exit "coprocess timing bug -- expected $e, got '$r'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin do print $i |&
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $r == $e ]] || err_exit "coprocess command substitution bug -- expected $e, got '$r'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then if [[ $( { sig=$sig $SHELL 2> /dev/null <<- '++EOF++'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then err_exit 'traps when reading from coprocess not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintrap 'sleep_pid=; kill $pid; err_exit "coprocess 1 hung"' TERM
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinexec 5<&p 6>&p
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprint -u6 hi; read -u5
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintrap 'sleep_pid=; kill $pid; err_exit "coprocess 2 hung"' TERM
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprint foo >&p 2> /dev/null || err_exit 'first write of foo to coprocess failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprint foo >&p 2> /dev/null || err_exit 'second write of foo to coprocess failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintrap 'sleep_pid=; kill $pid; err_exit "coprocess 3 hung"' TERM
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $REPLY == foo ]] || err_exit "first REPLY is $REPLY not foo"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinread <&p || err_exit 'second read from coprocess failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $REPLY == bar ]] || err_exit "second REPLY is $REPLY not bar"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland MainzCOATTRIBUTES=\'label=make \'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# @(#)$Id: libcoshell (AT&T Research) 2008-04-28 $
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz_COSHELL_msgfd=5
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz{ { (eval \'function fun { trap \":\" 0; return 1; }; trap \"exit 0\" 0; fun; exit 1\') && PATH= print -u$_COSHELL_msgfd ksh; } || { times && echo bsh >&$_COSHELL_msgfd; } || { echo osh >&$_COSHELL_msgfd; }; } >/dev/null 2>&1' | $SHELL 5>&1)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == $exp ]] || err_exit "coshell(3) identification sequence failed -- expected '$exp', got '$got'"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif print -p yo 2>/dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == $exp ]] || err_exit "main coprocess main query failed -- expected $exp, got '$got'"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif print -p yo 2>/dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == $exp ]] || err_exit "main coprocess subshell query failed -- expected $exp, got '$got'"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif print -p yo 2>/dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == $exp ]] || err_exit "subshell coprocess main query failed -- expected $exp, got '$got'"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif print -p yo 2>/dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == $exp ]] || err_exit "subshell coprocess subshell query failed -- expected $exp, got '$got'"