mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-10-07 00:02:06 +00:00
$SHELL is a snapshot the session inherits at login, so chsh never moves it -- a GUI launch keeps reporting the shell that was current when the user logged in, and goes on doing so until they log out. The window's shell menu marked the wrong entry "default" for that whole stretch. Read the passwd entry instead, via getpwuid_r -- the reentrant form, since getpwuid returns a pointer into a shared static another thread's lookup can overwrite. $SHELL stays as the fallback for the rare case where the lookup fails. The three callers that each reached for the variable on their own -- the default-name lookup, the PATH enrichment that runs the login shell at startup, and the shell-integration kind probe -- now share the one function. Same commit fixes who wins a name in the menu. Candidates were login shell, then /etc/shells, then $PATH, and dedupe keeps the first -- so on a machine with a Homebrew bash, /etc/shells listing /bin/bash first handed the entry to macOS's 3.2 from 2007, old enough that bash-completion 2.x will not load against it. Probe $PATH before /etc/shells and widen the probe list to the POSIX shells, so the menu's "bash" is the binary typing bash would reach; /etc/shells still catches anything installed off $PATH.