Imported from ../bash-2.05a.tar.gz.
This commit is contained in:
parent
28ef6c316f
commit
f73dda092b
303 changed files with 37069 additions and 28812 deletions
127
examples/functions/coshell.bash
Normal file
127
examples/functions/coshell.bash
Normal file
|
@ -0,0 +1,127 @@
|
|||
# vi:set sts=2 sw=2 ai:
|
||||
#
|
||||
# coshell.bash - Control shell coprocesses (see coprocess.bash).
|
||||
#
|
||||
|
||||
function coshell ()
|
||||
{
|
||||
while (( $# > 0 )) ; do
|
||||
case "$1" in
|
||||
#
|
||||
# coshell open
|
||||
#
|
||||
o|op|ope|open)
|
||||
shift
|
||||
coprocess open "$@"
|
||||
local ret=$?
|
||||
|
||||
# This should eat any ssh error messages or what not.
|
||||
coshell eval : >/dev/null 2>&1
|
||||
return $ret
|
||||
;;
|
||||
|
||||
#
|
||||
# coshell close
|
||||
#
|
||||
c|cl|clo|close)
|
||||
shift
|
||||
coprocess close "$@"
|
||||
return $?
|
||||
;;
|
||||
|
||||
#
|
||||
# coshell eval
|
||||
#
|
||||
e|ev|eva|eval)
|
||||
shift
|
||||
local cookie=$RANDOM
|
||||
if (( $# == 0 )) ; then
|
||||
echo "coshell eval: no argumentsl" >&2
|
||||
return 1
|
||||
fi
|
||||
if [ x$coprocess_pid = x ] ; then
|
||||
echo "coshell eval: no active coshell" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
coprocess print "$@"
|
||||
coprocess print "coprocess_rc=\$?"
|
||||
coprocess print "printf 'coprocess-$cookie----\n%d\n' \$coprocess_rc"
|
||||
if [ x$coprocess_pid = x ] ; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local ol
|
||||
while coprocess read ol ; do
|
||||
case "$ol" in
|
||||
*coprocess-$cookie----*)
|
||||
ol="${ol%coprocess-$cookie----}"
|
||||
echo -n "$ol"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
echo "$ol"
|
||||
done
|
||||
coprocess read ol
|
||||
return $ol
|
||||
;;
|
||||
|
||||
#
|
||||
# coshell sendfile
|
||||
#
|
||||
s|se|sen|send|sendf|sendfi|sendfil|sendfile)
|
||||
shift
|
||||
if (( $# != 2 )) ; then
|
||||
echo "coshell sendfile: syntax is 'coshell sendfile SRC TARGET'" >&2
|
||||
return 1
|
||||
fi
|
||||
if [ x$coprocess_pid = x ] ; then
|
||||
echo "coshell sendfile: no active coshell" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
local target=$2
|
||||
if coshell test -d "$target" ; then
|
||||
target="$target/${1##*/}"
|
||||
fi
|
||||
|
||||
coprocess print "uudecode <<END_OF_FILE"
|
||||
uuencode -m "$target" <$1 |coprocess print --stdin
|
||||
coshell eval "END_OF_FILE"
|
||||
return $?
|
||||
;;
|
||||
|
||||
#
|
||||
# coshell getfile
|
||||
#
|
||||
g|ge|get|getf|getfi|getfil|getfile)
|
||||
shift
|
||||
if (( $# != 2 )) ; then
|
||||
echo "coshell getfile: syntax is 'coshell getfile SRC TARGET'" >&2
|
||||
return 1
|
||||
fi
|
||||
if [ x$coprocess_pid = x ] ; then
|
||||
echo "coshell getfile: no active coshell" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
local target=$2
|
||||
if test -d "$target" ; then
|
||||
target="$target/${1##*/}"
|
||||
fi
|
||||
|
||||
coshell eval uuencode -m "$target" "<" "$1" |uudecode
|
||||
return $?
|
||||
;;
|
||||
|
||||
*)
|
||||
coshell eval "$@"
|
||||
return $?
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
coprocess status
|
||||
return $?
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue