Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: Keith Thompson Newsgroups: comp.unix.shell Subject: Re: Default PATH setting - reduce to something more sensible? Date: Thu, 23 Jan 2025 21:24:47 -0800 Organization: None to speak of Lines: 77 Message-ID: <87ldv06axs.fsf@nosuchdomain.example.com> References: <1a876l-53v.ln1@ID-313840.user.individual.net> <20250122120930.74@kylheku.com> <20250123134647.436@kylheku.com> <87v7u5m9m5.fsf@nosuchdomain.example.com> <87y0z1595p.fsf@nosuchdomain.example.com> <20250123171808.91@kylheku.com> MIME-Version: 1.0 Content-Type: text/plain Injection-Date: Fri, 24 Jan 2025 06:24:48 +0100 (CET) Injection-Info: dont-email.me; posting-host="ce3eaee7b38cea081e4acffc0808b70e"; logging-data="2192399"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+bLHKiCHrcah+wHu6qpGkx" User-Agent: Gnus/5.13 (Gnus v5.13) Cancel-Lock: sha1:7N1gOzcIp2uGMk3yTWsmLuozA1Y= sha1:mx6qZCzhfS1X4vunk/3C5tQ4zs8= Bytes: 4081 Kaz Kylheku <643-408-1753@kylheku.com> writes: > On 2025-01-24, Keith Thompson wrote: >> Here's my bug report: >> >> https://lists.gnu.org/archive/html/bug-bash/2025-01/msg00114.html > > The documentation's wording that is second most relevant to this > issue is: > > "Each variable assignment is checked for unquoted tilde-prefixes > immediately following a ':' or the first '='. In these cases, tilde > expansion is also performed. Consequently, one may use filenames with > tildes in assignments to PATH, MAILPATH, and CDPATH, and the shell > assigns the expanded value." > > In particular, the "Consequently," suggests that it is /as a > consequence/ of the above requirements (expansion of unescaped tildes in > variable assignments), and no other requirements, that it is possible to > tildes in PATH! That merely means that you can write something like PATH=/usr/local/bin:~/bin:/usr/bin:/bin and the ~ is expanded to $HOME when the assignment is performed. I don't see any implication about ~ being expanded when $PATH is queried when running a command. $ PATH=/usr/local/bin:~/bin:/usr/bin:/bin $ echo "$PATH" /usr/local/bin:/home/kst/bin:/usr/bin:/bin $ PATH="/usr/local/bin:~/bin:/usr/bin:/bin" $ echo "$PATH" /usr/local/bin:~/bin:/usr/bin:/bin > I say second most relevant, because I the most relevant passage in > the GNU Info manual: > > 6.11 Bash POSIX Mode > > [ ... ] > > The following list is what's changed when 'POSIX mode' is in effect: > > 1. [ ... ] > > [ ... ] > > 19. Literal tildes that appear as the first character in elements of > the PATH variable are not expanded as described above under > Tilde Expansion. > > Aha! This is the very feature: leading literal tildes in the PATH > elements being expanded, disabled by POSIX mode (such as invocation > as #!/bin/sh). > > But Tilde Expansion mentions no such thing! Exactly. > That's where the documentation would have to be, to fix the > dangling reference above. > > Still, the requirement itself can be deemed as being documented by point > 19 above; it implies that when Bash is in POSIX mode, tildes are somehow > expanded. Though the promised detailed description is missing, it > cannot reasonably be anything other than replacement by $HOME, > which is the actual behavior that can be inferred from experiments. I suggested in my bug report that this feature can cause problems. You can set $PATH to a value that's treated as intended for commands executed from the bash prompt, but not for commands invoked by other commands. -- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com void Void(void) { Void(); } /* The recursive call of the void */