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>