diff -d -urpN busybox.0/shell/ash.c busybox.1/shell/ash.c
--- busybox.0/shell/ash.c	2010-03-26 15:17:59.000000000 +0100
+++ busybox.1/shell/ash.c	2010-03-26 15:43:56.509895955 +0100
@@ -12281,7 +12281,7 @@ trapcmd(int argc UNUSED_PARAM, char **ar
 {
 	char *action;
 	char **ap;
-	int signo;
+	int signo, exitcode;
 
 	nextopt(nullstr);
 	ap = argptr;
@@ -12314,10 +12314,15 @@ trapcmd(int argc UNUSED_PARAM, char **ar
 	action = NULL;
 	if (ap[1])
 		action = *ap++;
+	exitcode = 0;
 	while (*ap) {
 		signo = get_signum(*ap);
-		if (signo < 0)
-			ash_msg_and_raise_error("%s: bad trap", *ap);
+		if (signo < 0) {
+			/* Mimic bash message exactly */
+			ash_msg("%s: invalid signal specification", *ap);
+			exitcode = 1;
+			goto next;
+		}
 		INT_OFF;
 		if (action) {
 			if (LONE_DASH(action))
@@ -12330,9 +12335,10 @@ trapcmd(int argc UNUSED_PARAM, char **ar
 		if (signo != 0)
 			setsignal(signo);
 		INT_ON;
+ next:
 		ap++;
 	}
-	return 0;
+	return exitcode;
 }
 
 
