Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Jun 2016 18:33:33 -0400
From:      Baho Utot <baho-utot@columbus.rr.com>
To:        freebsd-questions@freebsd.org
Subject:   Re: sh[it] and What am I missing here?
Message-ID:  <9d8dcc37-3047-4fab-abda-e10d3cf29893@columbus.rr.com>
In-Reply-To: <575492F8.6080504@holgerdanske.com>
References:  <31b2cfb1-1da8-9262-3f03-d964776c905e@columbus.rr.com> <575453F9.9070508@holgerdanske.com> <4daed7a2-9a0b-15d9-0bb2-31227f8fcddd@columbus.rr.com> <575492F8.6080504@holgerdanske.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 06/05/16 17:00, David Christensen wrote:
> 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
>

Ok Thanks I'll give it a go



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9d8dcc37-3047-4fab-abda-e10d3cf29893>