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