# try to disguise parameters from the eval'd command in case it's a function. integer __myfd=1 if [[ -n $1 ]]; then if [[ -z $tcp_by_name[$1] ]]; then print no such session: $1 __myfd=2 elif [[ -n $2 ]]; then local TCP_SESS=$1 shift # A bit tricky: make sure the first argument gets re-evaluated, # so as to get aliases etc. to work, but make sure the remainder # don't, so as not to bugger up quoting. This ought to work the # vast majority of the time, anyway. local __cmd=$1 shift eval $__cmd \$\* return else TCP_SESS=$1 return 0; fi fi # Print out the list of sessions, first the number, than the corresponding # file descriptor. The current session, if any, is marked with an asterisk. local cur name fd for name in ${(ko)tcp_by_name}; do fd=${tcp_by_name[$name]} # mark current session with an asterisk if [[ ${TCP_SESS} = $name ]]; then cur=" *" else cur= fi print "sess:$name; fd:$fd$cur" >&$__myfd done return $(( __myfd - 1 ))