Shell script termination with exit function in backquotes
Maxim Khitrov
max at mxcrypt.com
Mon Mar 14 00:26:50 UTC 2011
Hello everyone,
I might be doing something dumb here, but this doesn't make sense to
me. When I run the following script, I would expect to see no output:
----
#!/bin/sh
exit_prog()
{
echo -n 'before'
exit 0
echo -n 'after'
}
echo line 1: `exit_prog`
echo line 2:
echo line 3: `exit 1`
echo line 4:
----
The reason I expect to see no output is because 'exit 0' should be
called before any of the echo lines are allowed to execute. Instead,
what I get on FreeBSD 7 & 8 is:
----
line 1: before
line 2:
----
I don't understand this because 'exit 0' seems to terminate the call
to 'exit_prog', but the execution of the script continues. However,
when 'exit 1' is called, the script terminates before printing out the
last 2 lines.
It seems that 'exit' inside a function doesn't work when that function
is called with backquotes. I assume it has something to do with the
fact that commands in backquotes are executed in a sub-shell, but the
behavior is inconsistent.
When I run the same script on RHEL using bash, all 4 lines are printed:
----
line 1: before
line 2:
line 3:
line 4:
----
What's going on here?
- Max
More information about the freebsd-questions
mailing list