Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Jun 2016 14:00:40 -0700
From:      David Christensen <dpchrist@holgerdanske.com>
To:        freebsd-questions@freebsd.org
Subject:   Re: sh[it] and What am I missing here?
Message-ID:  <575492F8.6080504@holgerdanske.com>
In-Reply-To: <4daed7a2-9a0b-15d9-0bb2-31227f8fcddd@columbus.rr.com>
References:  <31b2cfb1-1da8-9262-3f03-d964776c905e@columbus.rr.com> <575453F9.9070508@holgerdanske.com> <4daed7a2-9a0b-15d9-0bb2-31227f8fcddd@columbus.rr.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 06/05/2016 10:15 AM, Baho Utot wrote:
> I only want to create a script ( sh script ) and run if from a clean
> machine with just base install nothing else and then run my sh script to
> build some ports.  That's were the trouble lies.  ie functions not
> returning status for example:
>
> test.sh
> chmod +x test.sh
>
> #!/bin/sh
>
> func() {
>      echo "Yep it's me"
>      return 1
> }
>
> if [ func ] ; then                 # if [ 1 = func ] or if [ 1 -eq func
> ] doesn't work either
>      echo "This works"
> fi
>
> ./test.sh
>
> [: func: unexpected operator

If I run your code on my FreeBSD 10.1 box with Csh login shell:

	dpchrist@p42800e:~/sandbox/sh % uname -a
	FreeBSD p42800e 10.1-RELEASE-p35 FreeBSD 10.1-RELEASE-p35 #0: Sat May 
28 03:02:45 UTC 2016 
root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386
	dpchrist@p42800e:~/sandbox/sh % echo $SHELL
	/bin/csh
	dpchrist@p42800e:~/sandbox/sh % cat baho-utot.sh
	#!/bin/sh

	func() {
	    echo "Yep it's me"
	    return 1
	}

	if [ func ] ; then                 # if [ 1 = func ] or if [ 1 -eq func 
] doesn't work either
	    echo "This works"
	fi
	dpchrist@p42800e:~/sandbox/sh % ./baho-utot.sh
	This works


I do not see the string "Yep it's me".


I see the string "This works".


I do not see an error message.


I get the same results if I change my login shell to Sh:

	$ echo $SHELL
	/bin/sh
	$ ./baho-utot.sh
	This works


Enabling the -v and -x options for Sh provides a clue -- 'func' is not 
getting called:

	$ echo $SHELL
	/bin/sh
	$ /bin/sh -v -x baho-utot.sh
	#!/bin/sh

	func() {
	    echo "Yep it's me"
	    return 1
	}

	if [ func ] ; then                 # if [ 1 = func ] or if [ 1 -eq func 
] doesn't work either
	    echo "This works"
	fi
	+ [ func ]
	+ echo 'This works'
	This works


Calling 'func' and then testing '$?' (exit value special variable) 
explicitly seems to help:

	$ cat baho-utot-2.sh
	#!/bin/sh

	func() {
	    echo "func returning 1"
	    return 1
	}

	func2() {
	    echo "func2 returning 0"
	    return 0
	}

	func
	if [ $? = 1 ] ; then
	    echo "func worked"
	else
	    echo "func did not work"
	fi

	func2
	if [ $? = 1 ] ; then
	    echo "func2 worked"
	else
	    echo "func2 did not work"
	fi
	$ ./baho-utot-2.sh
	func returning 1
	func worked
	func2 returning 0
	func2 did not work


David




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?575492F8.6080504>