On Thu, 26 Jan 2023 00:35:27 -0500 Lawrence Velázquez <v...@larryv.me> wrote:
> On Wed, Jan 25, 2023, at 6:37 PM, Sergei Trofimovich wrote: > > I fear it's a side-effect of the way 'bash' gets executed via shebang by > > kernel. But maybe not? Somehow direct script execution still manages to > > preserve script's name. Is it an intended behaviour that could not be > > easily changed? Or it's a bug? > > It's not a bug. Thank you! That will make generic wrapping a bit more involved for us. > https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html#index-0 > > 0 > ($0) Expands to the name of the shell or shell > script. This is set at shell initialization. If > Bash is invoked with a file of commands (see Shell > Scripts), $0 is set to the name of that file. If > Bash is started with the -c option (see Invoking > Bash), then $0 is set to the first argument after > the string to be executed, if one is present. > Otherwise, it is set to the filename used to invoke > Bash, as given by argument zero. > > Whenever bash is executed with a script file, it sets $0 to the > name of that file. It only uses caller-provided values for $0 when > a script file is not provided. > > $ (exec -a foo bash <<<'echo "$0"') > foo > $ (exec -a foo bash -s bar baz quux <<<'echo "$0"') > foo > $ (exec -a foo bash -c 'echo "$0"') > foo > $ (exec -a foo bash -c 'echo "$0"' bar baz quux) > bar > > This behavior is standardized in POSIX [*] and is not unique to > bash (I omitted ksh93, which actually does produce "foo" here). > > $ (exec -a foo zsh <(echo 'echo "$0"')) > /dev/fd/63 > $ (exec -a foo dash <(echo 'echo "$0"')) > /dev/fd/63 > $ (exec -a foo yash <(echo 'echo "$0"')) > /dev/fd/63 > $ (exec -a foo mksh <(echo 'echo "$0"')) > /dev/fd/63 > > [*]: > https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html#tag_20_117_05 > > -- > vq -- Sergei