Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I don't think bash is involved here?


I don't think so either. It's something in the implementation of `execv` I think.

    #include <unistd.h>                                                             
                                                                                
    int main() {                                                                    
        execl("cat-quine", "cat-quine", NULL);                                      
        return 0;                                                                   
    }
Is sufficient to have this work.


An entire generation of programmer has grown up not knowing that this is implemented in the kernel.


I remember being surprised by this and then realising, "wait, of course it's in the kernel -- that's so much nicer from a usability and sanity standpoint".


It's implemented in the kernel. Look at fs/binfmt_script.c in the Linux kernel source tree for an example.



More precisely:

  - The shell finds opens up the file you want to execute

  - It gets the first line of the file

  - It figures out what program to execute

  - It calls fork()

  - In the new process, it executes the program (using exec()) and passes the file as the input to the program.


The shell is not involved in looking at the first line of the program, that's what happens in `exec`.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: