Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
Because execl's first argument isn't argv[0]. execl("/bin/sh", "-c", ...) runs the executable /bin/sh, but sets its argv[0] to "-c", as if one had created a link called -c pointing at it and run t...
Answer
#1: Initial revision
**Because `execl`'s first argument isn't `argv[0]`.** `execl("/bin/sh", "-c", ...)` runs the executable `/bin/sh`, but sets its `argv[0]` to `"-c"`, as if one had created a link called `-c` pointing at it and run that. **The correct way to do this is `execl("/bin/sh", "sh", "-c", ...)`**. Busybox works here by accident, because it has `sh` as its `argv[0]`: its `argv` when executed as I did in my last example would be `{"sh", "-c", "echo hello world"}`. Busybox, specifically, actually does support being called like that (a normal way to use busybox is to install it somewhere and then symlink all the commands it supports, including `sh`, to it).