From 80ed1bf997117a36b9d0e10744de736e84d96e7f Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Tue, 29 Sep 2026 03:04:42 -0300 Subject: Shell refuses a name that is no executable, and bare restores the default Shell took any word and the host quietly ran another shell at the next spawn. It now refuses a path or name that is not executable ("Shell: x: no executable by that name", failing a ctl write, logged err), a bare Shell goes back to the default, and a default $SHELL that is not executable falls back to /bin/sh. shellset's golden takes the refusal on the message row (re-recorded by name). Co-Authored-By: Claude Opus 5.5 --- test/snapshots/shellset.golden | 2 +- test/snapshots/shellset.snap | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'test') diff --git a/test/snapshots/shellset.golden b/test/snapshots/shellset.golden index 0af8f2e1..ae3b9fd0 100644 --- a/test/snapshots/shellset.golden +++ b/test/snapshots/shellset.golden @@ -4,7 +4,7 @@ | /tmp/pardes-snap/shellset/cwd/cmd.txt Save Tty Collapse Del | 1 Shell zznosuchshell == snap builtin-ran grid=90x21 cursor=25,3 -|3: 1 Shell zznosuchshell Shell +|3: 1 Shell zznosuchshell Shell: zznosuchshell: no executable by that name == snap fallback-shell grid=90x21 cursor=49,6 |1: New Tty Find Grep Joincol Delcol New Tty Find Grep Joincol Delcol |2: /tmp/pardes-snap/shellset/cwd/cmd.txt Save /tmp/pardes-snap/shellset/cwd Tty+bash Sav diff --git a/test/snapshots/shellset.snap b/test/snapshots/shellset.snap index ef8b02b9..7d213a84 100644 --- a/test/snapshots/shellset.snap +++ b/test/snapshots/shellset.snap @@ -1,12 +1,12 @@ # The Shell builtin names the binary the NEXT terminal execs. What is pinned # here is the case that has to hold on a machine you did not set up: the name -# resolves to nothing, and the pane opens anyway. +# resolves to nothing, so Shell refuses it and says why on the message row, +# and the next pane opens anyway with the shell that was set before. # -# That is not a corner — it is the DEFAULT's failure mode. pardes defaults -# to $SHELL, which may name a shell the box lacks, and it must still get a working -# shell rather than a pane whose child dies at exec and shows one EOF. So the -# lookup falls back, and this is the proof: a name nothing resolves to, and the -# new pane still greets and lists like any other. +# A default $SHELL that names nothing executable falls back to /bin/sh +# (config.defaultShell), and the host's lookup still falls back at spawn for +# a shell that went away after it was set: a pane never gets a child that +# dies at exec and shows one EOF. # # The rest of the feature is unit-tested rather than pinned here, on purpose. # Which family a binary belongs to, what argv each one gets and where the -- cgit v1.3