From owner-freebsd-questions@FreeBSD.ORG Mon Mar 14 00:26:50 2011 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5B79F106566C for ; Mon, 14 Mar 2011 00:26:50 +0000 (UTC) (envelope-from max@mxcrypt.com) Received: from mail-vw0-f54.google.com (mail-vw0-f54.google.com [209.85.212.54]) by mx1.freebsd.org (Postfix) with ESMTP id EDD9E8FC15 for ; Mon, 14 Mar 2011 00:26:49 +0000 (UTC) Received: by vws18 with SMTP id 18so2259890vws.13 for ; Sun, 13 Mar 2011 17:26:49 -0700 (PDT) Received: by 10.52.179.228 with SMTP id dj4mr2572322vdc.169.1300062409111; Sun, 13 Mar 2011 17:26:49 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.180.135 with HTTP; Sun, 13 Mar 2011 17:26:19 -0700 (PDT) From: Maxim Khitrov Date: Sun, 13 Mar 2011 20:26:19 -0400 Message-ID: To: FreeBSD Content-Type: text/plain; charset=UTF-8 Subject: Shell script termination with exit function in backquotes X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Mar 2011 00:26:50 -0000 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