Hi all,

 I found a case in which IMHO the ash does not behave as expected by a shell.
 When there is a stopped job the exit command is ignored but it should not.
 At least bash does not ignore the exit if a stopped job exists.

exitcmd(int argc UNUSED_PARAM, char **argv)
{
// These are the two lines responsible for the issue
// if (stoppedjobs())
// return 0;

 I suggest removing those two lines of code.
 In attachment to this email the test I did with the results for bash
and busybox ash.

 Best regards,
-- 
Roberto A. Foglietta
+39.349.33.30.697
################## TEST B ##################
hello by myecho() at line 27
FUNCNAME = , LINENO = 45, EXITSTATUS: 0
FUNCNAME = , LINENO = 46
hello by mytrue() at line 36
FUNCNAME = , LINENO = 47, EXITSTATUS: 0
FUNCNAME = , LINENO = 48
hello by myfalse() at line 31
FUNCNAME = , LINENO = 50
hello by myfalse() at line 31
FUNCNAME = , LINENO = 51, EXITSTATUS: 1
FUNCNAME = , LINENO = 52
hello by mytrue() at line 36
FUNCNAME = , LINENO = 53, EXITSTATUS: 0
FUNCNAME = , LINENO = 54
hello by myfalse() at line 31
ERROR: testB.sh failed in myfalse() at line 32, rc: 1
onerror() at line 16 == 16
ERROR: testB.sh failed at line 55, rc: 1
onerror() at line 16 == 16
FUNCNAME = , LINENO = 55, EXITSTATUS: 1
FUNCNAME = , LINENO = 56
hello by myexit() at line 22
exit in myexit() at line 1 == 60, EXITSTATUS: 1
exit in () at line 1 == 60, EXITSTATUS: 0
exit code 1
#############################################

#!/bin/ash

function realexit() {
	trap - EXIT
	exit $1
}

function perr() {
	echo -e "\e[1;31m$@\e[0m"
}

function onerror() {
	rc=$?
#	echo
	echo "ERROR: $(basename $0) failed${2+ in $2()} at line $1, rc: $rc" 
	echo "$FUNCNAME() at line $LINENO == 16"
#	echo
#	realexit $rc
}

function myexit() {
	echo "hello by $FUNCNAME() at line $LINENO"
	exit $1
}

function myecho() {
	echo "hello by $FUNCNAME() at line $LINENO"
}

function myfalse() {
	echo "hello by $FUNCNAME() at line $LINENO"
	false
}

function mytrue() {
	echo "hello by $FUNCNAME() at line $LINENO"
	true
}

trap 'onerror $LINENO $FUNCNAME' ERR
trap 'echo exit in $FUNCNAME\(\) at line $LINENO == 60, EXITSTATUS: $?' EXIT

set -E

myecho && echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO, EXITSTATUS: $?"
echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO"
mytrue && echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO, EXITSTATUS: $?"
echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO"
myfalse && echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO, EXITSTATUS: $?"
echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO"
myfalse || echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO, EXITSTATUS: $?"
echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO"
mytrue; echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO, EXITSTATUS: $?"
echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO"
myfalse; echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO, EXITSTATUS: $?"
echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO"
set -m
sleep 60 & kill -STOP $!
sleep 1
myexit 1 || echo "FUNCNAME = $FUNCNAME, LINENO = $LINENO, EXITSTATUS: $?"
echo "should not print this!"

################## TEST B ##################
hello by myecho() at line 27
FUNCNAME = , LINENO = 45, EXITSTATUS: 0
FUNCNAME = , LINENO = 46
hello by mytrue() at line 36
FUNCNAME = , LINENO = 47, EXITSTATUS: 0
FUNCNAME = , LINENO = 48
hello by myfalse() at line 31
FUNCNAME = , LINENO = 50
hello by myfalse() at line 31
FUNCNAME = , LINENO = 51, EXITSTATUS: 1
FUNCNAME = , LINENO = 52
hello by mytrue() at line 36
FUNCNAME = , LINENO = 53, EXITSTATUS: 0
FUNCNAME = , LINENO = 54
hello by myfalse() at line 31
ERROR: testB.sh failed in myfalse() at line 32, rc: 1
onerror() at line 16 == 16
ERROR: testB.sh failed at line 55, rc: 1
onerror() at line 16 == 16
FUNCNAME = , LINENO = 55, EXITSTATUS: 1
FUNCNAME = , LINENO = 56
hello by myexit() at line 22
should not print this!
exit in () at line 61 == 60, EXITSTATUS: 0
exit code 0
#############################################

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to