say i have 2 scripts, scriptA and scriptB.

#!/bin/sh ./scriptB 1 2 3


echo 0:$0
echo 1:$1
echo 2:$2
echo 3:$3


$ ./scriptA



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 [EMAIL PROTECTED]
with "unsubscribe freebsd-questions" in the body of the message

Reply via email to