The exec() family of functions replaces the current process image with a new process image. The functions described in this manual page are layered on top of execve(2).
However, it refers to execve as a system call, not as a library function.
What's broken
Here's a simple test to show inconsistency between ./test.sh and env ./test.sh
That should not happen.
On my system, /bin/sh leads to /system/bin/sh.
It shows that the parameters passed to execvp are not altered.
What it's all about
Right now,
termux-exec
only wrapsexecve
.env
however, usesexecvp
to execute external programs. https://github.com/coreutils/coreutils/blob/a94a551ee031e0ff07d707f867cb08a8be83e78c/src/env.c#L921The man for
exec(3)
does say that:However, it refers to
execve
as a system call, not as a library function.What's broken
Here's a simple test to show inconsistency between
./test.sh
andenv ./test.sh
That should not happen. On my system,/bin/sh
leads to/system/bin/sh
. It shows that the parameters passed toexecvp
are not altered.