sh[it] and What am I missing here?
Baho Utot
baho-utot at columbus.rr.com
Sun Jun 5 22:33:41 UTC 2016
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 at 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 at amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386
> dpchrist at p42800e:~/sandbox/sh % echo $SHELL
> /bin/csh
> dpchrist at 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 at 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
More information about the freebsd-questions
mailing list