Henrik wrote:
If you omit the #!/bin/bash from child.sh, I suspect
the original bash will
look at the file, recognize it's executable, but
since the file doesn't
specify a new command interpreter, it's equivalent to
". ./child.sh" meaning
the parent script simply sources the child script.
Not in a new
Interpreter.
Not quite. It's equivalent to "bash ./child.sh" rather than ". ./child.sh".
I sounds plausible, but I am not sure it is excatly like that because a quick
test did not give me the expected result
After I trid to change test.sh to use the ". ./child.sh" notation, I do not get
a child process at all, only the process of test.sh
13870 -bash
17820 /bin/bash ./test.sh
17824 sleep 160
So somehow running without "#!/usr/bin/bash" gets me a new process in the same
interpreter ?
The shell forks, and the child process tries to execute child.sh using
execve(). If this succeeds, the arguments you see in ptree show the
child script. If it fails (because there is no #! line), the child
process interprets the script, but the process args still match those of
the parent.
Have a look at shell_execve() in the bash sources for details.
Scott
--
Scott Rotondo
Principal Engineer, Solaris Security Technologies
President, Trusted Computing Group
Phone/FAX: +1 408 850 3655 (Internal x68278)
_______________________________________________
opensolaris-discuss mailing list
[email protected]