Shell script termination with exit function in backquotes

Andres Perera andres.p at zoho.com
Mon Mar 14 07:09:51 UTC 2011


ash tries to overoptimize by running certain command substitutions
without a subshell

On Sun, Mar 13, 2011 at 7:56 PM, Maxim Khitrov <max at mxcrypt.com> wrote:
> 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
> _______________________________________________
> freebsd-questions at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"
>


More information about the freebsd-questions mailing list