4 ms·
First argument in bash is the name of the file. So, this is a quine, since the output of running it is the contents of the script, which is: #!/bin/cat [EDIT]
by mijoharas 10y ago
First argument in bash is the name of the file. So, this is a quine, since the output of running it is the contents of the script, which is:
#!/bin/cat
[EDIT] as pointed out, I misspoke, and this is false.
- 0x0 10y agoI don't think bash is involved here?
- kovek 10y agoMore 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.
- Tyr42 10y agoThe shell is not involved in looking at the first line of the program, that's what happens in `exec`.
- Tyr42 10y agoI 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.
- khc 10y agoAn entire generation of programmer has grown up not knowing that this is implemented in the kernel.
- cyphar 10y agoI 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".
- cyphar 10y agoIt's implemented in the kernel. Look at fs/binfmt_script.c in the Linux kernel source tree for an example.
- geon 10y agoSomeone linked to it on reddit: https://www.reddit.com/r/programming/comments/4k7gvh/shebang_quine/d3csbiu https://www.reddit.com/r/programming/comments/4k7gvh/shebang...