[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 'exec -a' and $0 substitution
From: |
Martin D Kealey |
Subject: |
Re: 'exec -a' and $0 substitution |
Date: |
Fri, 27 Jan 2023 07:54:47 +1000 |
On Thu, 26 Jan 2023, 09:37 Sergei Trofimovich, <slyich@gmail.com> wrote:
> To the bug: looks like 'exec -a' does not work for bash scripts, but does
> work for other executables.
>
Be aware that the kernel is responsible for interpreting #! lines, not bash.
The kernel does several steps when it encounters an executable that starts
with the bytes '#' and '!'.
1. replacing argv[0] with the exec path, and
2. read bytes up to the first newline, skipping leading and trailing
whitespace;
3. if interstitial whitespace is present, split into two words at the first
run of whitespace
4. push these latter strings onto the front of argv
5. replace the exec path with a copy of (the new) argb[0]
6. re-start the execve procedure
Failing to make the substitution in step 1 would leave the interpreter
running but with no idea how to open the script so that it could run it.
-Martin
>