coproc.bash

来自「android-w.song.android.widget」· BASH 代码 · 共 109 行

BASH
109
字号
# coprocess.bash## vi:set sts=2 sw=2 ai:#coprocess_pid=## coprocess - Start, control, and end coprocesses.#function coprocess (){  while (( $# > 0 )) ; do    case "$1" in      #      # coprocess close      #      c|cl|clo|clos|close)	shift	exec 61>&- 62<&-	coprocess_pid=	if [ "$1" = "-SIGPIPE" ] ; then	  # Only print message in an interactive shell	  case "$-" in	    *i*)	      echo 'SIGPIPE' >&2	      ;;	  esac	  return 1	fi	return 0	;;      #      # coprocess open      #      o|op|ope|open)	shift	local fifo="/var/tmp/coprocess.$$.$RANDOM"	local cmd="/bin/bash"	if (( $# > 0 )) ; then	  cmd="$@"	fi	mkfifo "$fifo.in" || return $?	mkfifo "$fifo.out" || {	  ret=$?	  rm -f "$fifo.in"	  return $?	}	( "$@" <$fifo.in >$fifo.out ; rm -f "$fifo.in" "$fifo.out" ) &	coprocess_pid=$!	exec 61>$fifo.in 62<$fifo.out	return 0	;;      #      # coprocess print - write to the coprocess      #      p|pr|pri|prin|print)	shift	local old_trap=$(trap -p SIGPIPE)	trap 'coprocess close -SIGPIPE' SIGPIPE	if [ $# -eq 1 ] && [ "$1" = "--stdin" ] ; then	  cat >&61	else	  echo "$@" >&61	fi	local ret=$?	eval "$old_trap"	return $ret	;;      #      # coprocess read - read from the coprocess      #      r|re|rea|read)	shift	local old_trap=$(trap -p SIGPIPE)	trap '_coprocess_close -SIGPIPE' SIGPIPE	builtin read "$@" <&62	local ret=$?	eval "$old_trap"	return $ret	;;      s|st|sta|stat|statu|status)	if [ -z "$coprocess_pid" ] ; then	  echo 'no active coprocess'	  return 1	else	  echo "  coprocess is active [$coprocess_pid]"	  return 0	fi	;;      *)	coprocess print "$@"	return $?	;;    esac    shift  done  coprocess status  return $?}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?