dipende quale exec* viene eseguita, facendo qualche prova direi una della famiglia "p":
Codice: Seleziona tutto
crap0101@orange:/tmp$ cat foo.c
#include <stdio.h>
#include <unistd.h>
int
main (int argc, char **argv) {
int ret;
++argv;
ret = execvp(*argv, argv);
printf("foo: exec* return code: %d\n", ret);
return ret;
}
crap0101@orange:/tmp$ gcc -Wall foo.c -o foo
crap0101@orange:/tmp$ cat bar
#!/bin/cat
echo 'ciao dal bar'
readlink -f /proc/$$/exe
crap0101@orange:/tmp$ ./foo bash bar # viene eseguita bash
ciao dal bar
/bin/bash
crap0101@orange:/tmp$ ./foo sh bar # viene eseguita sh
ciao dal bar
/bin/dash
crap0101@orange:/tmp$ ./foo bar # errore, la dir corrente non è nel path
foo: exec* return code: -1
crap0101@orange:/tmp$ ./foo /tmp/bar # viene eseguito /bin/cat
#!/bin/cat
echo 'ciao dal bar'
readlink -f /proc/$$/exe
crap0101@orange:/tmp$ nano bar
crap0101@orange:/tmp$ cat bar
######!/bin/cat
echo 'ciao dal bar'
readlink -f /proc/$$/exe
crap0101@orange:/tmp$ ./foo /tmp/bar # NON viene eseguito cat ma sh
ciao dal bar
/bin/dash
crap0101@orange:/tmp$
in pratica, come da doc, se l'header è qualcosa che sembra avere un senso, lo si esegue, altrimenti si cerca l'eseguibile di default (sh in questo caso)