Shell script termination with exit function in backquotes

Maxim Khitrov max at mxcrypt.com
Mon Mar 14 02:05:09 UTC 2011


On Sun, Mar 13, 2011 at 9:59 PM, Scott Ballantyne <boyvalue at gmail.com> wrote:
> On Sun, Mar 13, 2011 at 8:26 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
>
> Backquotes run the process in a sub process, that exits. and the original
> process continues.
>

Yes, my original expectation of having no output is incorrect, but
`exit 1` terminates the parent shell in FreeBSD. That's the source of
my confusion.

- Max


More information about the freebsd-questions mailing list