From owner-freebsd-questions@FreeBSD.ORG Tue Jan 8 21:46:27 2013 Return-Path: Delivered-To: questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 552EF61F for ; Tue, 8 Jan 2013 21:46:27 +0000 (UTC) (envelope-from freebsd@edvax.de) Received: from mx01.qsc.de (mx01.qsc.de [213.148.129.14]) by mx1.freebsd.org (Postfix) with ESMTP id 204B7DB4 for ; Tue, 8 Jan 2013 21:46:26 +0000 (UTC) Received: from r56.edvax.de (port-92-195-31-80.dynamic.qsc.de [92.195.31.80]) by mx01.qsc.de (Postfix) with ESMTP id D6DB73CD7F; Tue, 8 Jan 2013 22:46:23 +0100 (CET) Received: from r56.edvax.de (localhost [127.0.0.1]) by r56.edvax.de (8.14.5/8.14.5) with SMTP id r08LkQQ5004177; Tue, 8 Jan 2013 22:46:26 +0100 (CET) (envelope-from freebsd@edvax.de) Date: Tue, 8 Jan 2013 22:46:26 +0100 From: Polytropon To: Fbsd8 Subject: Re: sh script problem with capturing return code Message-Id: <20130108224626.8c2d89cd.freebsd@edvax.de> In-Reply-To: <50EC9009.3030305@a1poweruser.com> References: <50EC9009.3030305@a1poweruser.com> Organization: EDVAX X-Mailer: Sylpheed 3.1.1 (GTK+ 2.24.5; i386-portbld-freebsd8.2) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: FreeBSD questions X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Polytropon List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jan 2013 21:46:27 -0000 On Tue, 08 Jan 2013 16:30:49 -0500, Fbsd8 wrote: > > I can not get the return code from mtree to control > the displaying of a error message. > > The mtree at the end of the script does function correctly > because I can tell from the printed output. > > When mtree prints comments saying "extra" that means the directory being > read does not match the specification file. return code should be Not > equal to zero. > > And when they do match IE: no mtree comments printed, that should be a > return code of zero. > > I tried 2 different ways to capture the return code to no joy. > What I am doing wrong? > > #! /bin/sh > flavor="/a/mtree.std" > echo "flavor = ${flavor}" > /bin/cat << EOF | > /set type=dir uname=root gname=wheel > . > etc ignore > .. > root ignore > .. > usr > home ignore > .. > local > etc ignore > .. > .. > .. > .. > EOF > > mtree -d -u -p "${flavor}" || \ > echo "Error invalid directories in flavor ${flavor}." > > #mtree -d -p "${flavor}" > #[ $? -eq 0 ] || \ > # echo "Error invalid directories in flavor ${flavor}." > echo "return = $?" It seems that returning 0 is correct in a case as you mentioned. The manual at "man mtree" states: EXIT STATUS The mtree utility exits 0 on success, and >0 if an error occurs. Question: What _is_ an error here? If you use the source Luke at /usr/src/usr.sbin/mtree/mtree.c, you could find out what combination of options plus circumstances found at runtime could trigger an exit status != 0. The main() functions finishes with exit(status); where status is either set by functions mtree_specspec() or mtree_verifyspec(), or manually to 0 when -U is provided and MISMATCHEXIT (is 2) is encountered. Again from the manual: -u Same as -U except a status of 2 is returned if the file hierarchy did not match the specification. -U Modify the owner, group, permissions, and modification time of existing files to match the specification and create any missing directories or symbolic links. User, group and permissions must all be specified for missing directories to be created. Corrected mismatches are not considered errors. However, you're not using -U, but -u, so the last sentence of the description above should be relevant: No error per se, even though the status code should be 2. -- Polytropon Magdeburg, Germany Happy FreeBSD user since 4.0 Andra moi ennepe, Mousa, ...