Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Mar 2011 20:26:19 -0400
From:      Maxim Khitrov <max@mxcrypt.com>
To:        FreeBSD <freebsd-questions@freebsd.org>
Subject:   Shell script termination with exit function in backquotes
Message-ID:  <AANLkTi=-CFmxRicGcosvzhBbM3DMjbWwQNirMrJ1_KP=@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTi=-CFmxRicGcosvzhBbM3DMjbWwQNirMrJ1_KP=>