Messages in this thread | | | Date | Fri, 19 Mar 2010 23:42:41 -0700 (PDT) | From | Valery Reznic <> | Subject | Re: execve for script don't return ENOEXEC, bug ? |
| |
--- On Sat, 3/20/10, David Newall <davidn@davidnewall.com> wrote:
> From: David Newall <davidn@davidnewall.com> > Subject: Re: execve for script don't return ENOEXEC, bug ? > To: "Valery Reznic" <valery_reznic@yahoo.com> > Cc: linux-kernel@vger.kernel.org > Date: Saturday, March 20, 2010, 2:37 AM > On Thu, 11 Mar 2010 02:56:16 -0800 > (PST) Valery Reznic <valery_reznic@yahoo.com> > wrote: > > Hi, > > > > I Have following to scripts: > > > > a.sh > > #!/bin/sh > > echo "It's a.sh > > > > and b.sh: > > #! ./b.sh > > echo "It's b.sh" > > > [...] > > When I run same scripts on Fedora 12 x86_64 box with > stock kernel 2.6.31.5-127.fc12.x86_64 I got following: > > > > strace -f -e execve setarch i386 ./b.sh > execve("/usr/bin/setarch", ["setarch", "i386", "./b.sh"], > [/* 41 vars */]) = 0 > > execve("./b.sh", ["./b.sh"], [/* 41 vars */]) = 0 > > It's a.sh > > I see no circumstance which would make b.sh invoke a.sh > (and thus emit "It's a.sh"). Are you sure these are the > actual scripts and output?
Of course you are right. Somehow I messed up b.sh (OK, this file is so long and complicated, so no wonder :) Anyway my bad, sorry.
In the b.sh interpreter should be ./a.sh
Another attempt to provide correct data:
[valery@localhost ~]$ cat a.sh #!/bin/sh echo "It's a.sh" [valery@localhost ~]$ cat b.sh #! ./a.sh echo "It's b.sh" [valery@localhost ~]$ [valery@localhost ~]$ strace -f -e execve setarch i386 ./b.sh execve("/usr/bin/setarch", ["setarch", "i386", "./b.sh"], [/* 40 vars */]) = 0 execve("./b.sh", ["./b.sh"], [/* 40 vars */]) = 0 It's a.sh [valery@localhost ~]$
> > On the other hand, if the output was "It's b.sh", this is > compatible with many historical versions of UNIX, which > assumed /bin/sh to be the script interpreter. On > 2.6.28-16-generic #55-Ubuntu SMP i686 GNU/Linux I get > successful output for the following variants of "x.sh": > > : > echo worked > > and > > #! > echo worked > > and > > #! ./x.sh > echo worked My problem is not incorrect output, but successful execve, when script's interpreter is interpreter itself.
Somewhere between Fedora 8 and Fedora 12 execve's behaviour changed.
@Andrew: When b.sh has interpreter ./b.sh I got expected ENOEXEC, same as you.
Regards, Valery.
>
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |