Laurent Bercot:
The real question is, why is there a "umask" binary that's not the one from execline? Non-chainloading non-builtin umask is nonsense, just like non-chainloading non-builtin cd.

Not quite. People find uses for these things, and as the SUS rationale points out, for every potentially useless external equivalent of a (non-special) built-in command someone has come up with an arcane actual use for it. Even "cd".

* https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap01.html#tag_23_01_07

* https://unix.stackexchange.com/q/50058/5132

The POSIX model is therefore that all non-special built-ins are also available as executables; or, rather, that all of the standard utilities that are not special built-ins are simply *available* (via execvp(), find -exec, env, and *all of the other* ways that standard utilities can be invoked), and whether they are built-in or not, to a shell or otherwise, is an implementation detail as far as actually invoking the utility is concerned. (Very few shells truly conform to this, but the Watanabe shell largely does in its non-native mode.)

* https://unix.stackexchange.com/q/347188/5132

* https://unix.stackexchange.com/q/496259/5132

nosh, not being a shell, is not bound by this. Its built-ins are found before a PATH search is enacted. So it actually does what M. Geraghty mistakenly thought execline was doing. It finds its own built-ins in preference to finding external commands; so invoking "umask" (without directory name prefix) within a nosh script will always invoke the built-in chain-loading one, irrespective of PATH. (Several of the non-conformant shells do this, too, giving their built-ins unequivocal precedence over a PATH search. Some even document this behaviour. But it is not standard-conformant for a shell.)

* https://unix.stackexchange.com/a/496377/5132

* http://jdebp.uk./Softwares/nosh/guide/commands/exec.xml

execline always searches PATH. It does not have built-ins like nosh or shells, in the first place. There's a quirk about when changes to PATH take effect, and it does not quite have the POSIX semantics for when PATH is not set, but other than that it actually has the POSIX model behaviour: Commands are located using PATH, and what command one invokes by the name "umask" is entirely determined by what PATH lists.

* https://unix.stackexchange.com/a/448799/5132

Reply via email to