59 lines
		
	
	
	
		
			732 B
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
	
		
			732 B
		
	
	
	
		
			Bash
		
	
	
	
	
	
|   | trap _notify CHLD | ||
|  | NOTIFY_ALL=false | ||
|  | unset NOTIFY_LIST | ||
|  | unalias false | ||
|  | 
 | ||
|  | false() | ||
|  | { | ||
|  | 	return 1 | ||
|  | } | ||
|  | 
 | ||
|  | _notify () | ||
|  | { | ||
|  | 	local i j | ||
|  | 	local newlist= | ||
|  | 
 | ||
|  | 	if $NOTIFY_ALL | ||
|  | 	then | ||
|  | 		return		# let bash take care of this itself | ||
|  | 	elif [ -z "$NOTIFY_LIST" ]; then | ||
|  | 		return | ||
|  | 	else | ||
|  | 		set -- $NOTIFY_LIST | ||
|  | 		for i in "$@" | ||
|  | 		do | ||
|  | 			j=$(jobs -n %$i) | ||
|  | 			if [ -n "$j" ]; then | ||
|  | 				echo "$j" | ||
|  | 				jobs -n %$i >/dev/null | ||
|  | 			else | ||
|  | 				newlist="newlist $i" | ||
|  | 			fi | ||
|  | 		done | ||
|  | 		NOTIFY_LIST="$newlist" | ||
|  | 	fi | ||
|  | } | ||
|  | 
 | ||
|  | notify () | ||
|  | { | ||
|  | 	local i j | ||
|  | 
 | ||
|  | 	if [ $# -eq 0 ]; then | ||
|  | 		NOTIFY_ALL=: | ||
|  | 		set -b | ||
|  | 		return | ||
|  | 	else | ||
|  | 		for i in "$@" | ||
|  | 		do | ||
|  | 			# turn a valid job spec into a job number | ||
|  | 			j=$(jobs $i) | ||
|  | 			case "$j" in | ||
|  | 			[*)	j=${j%%]*} | ||
|  | 				j=${j#[} | ||
|  | 				NOTIFY_LIST="$NOTIFY_LIST $j" | ||
|  | 				;; | ||
|  | 			esac | ||
|  | 		done | ||
|  | 	fi | ||
|  | } |