Date: Sat, 8 Feb 2003 15:44:25 GMT From: abc@anchorageinternet.org To: "freebsd-questions" <questions@freebsd.org> Subject: #!/bin/sh & execve Message-ID: <200302081544.h18FiPTu024398@en26.groggy.anc.acsalaska.net>
next in thread | raw e-mail | index | archive | help
say i have 2 scripts, scriptA and scriptB.
scriptA
-------
#!/bin/sh ./scriptB 1 2 3
scriptB
-------
#!/bin/sh
echo 0:$0
echo 1:$1
echo 2:$2
echo 3:$3
--
$ ./scriptA
$0:./scriptB
$1:1
$2:2
$3:3
--
according to execve(2), only a single [arg] should be recognized:
#! interpreter [arg]
When an interpreter file is execve'd, the system actually execve's the
specified interpreter. If the optional arg is specified, it becomes the
first argument to the interpreter, and the name of the originally
execve'd file becomes the second argument; otherwise, the name of the
originally execve'd file becomes the first argument. The original argu-
ments are shifted over to become the subsequent arguments. The zeroth
argument is set to the specified interpreter.
so the argv[] array in execve() should be loaded as:
argv[0]=sh, argv[1]=scriptB, argv[2]=scriptA, and
argv[3...]=command line args passed to scriptA.
i read many many execve() man pages, and it seems like this
is the way things should be. but in practice, it appears on
many unix's, argv[] gets loaded additionally with any options
given to a script (which is given as the "[arg]" to the interpreter)
on the 1st line of a script.
can anyone tell me if this is "proper", and why or why not?
there doesn't seem to be consistency across unix's.
some ignore, or give an error if more than one
"[arg]" exists on the 1st line of a script.
thank you.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200302081544.h18FiPTu024398>
