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>