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