From c3f0f3acd69e35bb2a455924e7946b948bdabb14 Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Sun, 8 Dec 2024 20:21:31 -0800 Subject: [PATCH] Return non-zero exit status when Eshell's "which" fails to find a command * lisp/eshell/esh-cmd.el (eshell/which): Set exit status to 1 if we couldn't find any of the commands (bug#74739). (cherry picked from commit b6c91cdf54168eef260e28a7866486a4d68bfc9e) --- lisp/eshell/esh-cmd.el | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index 4b7061c0e01..0927fd8f087 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -1381,19 +1381,22 @@ have been replaced by constants." (defun eshell/which (command &rest names) "Identify the COMMAND, and where it is located." - (dolist (name (cons command names)) - (condition-case error - (eshell-printn - (catch 'found - (run-hook-wrapped - 'eshell-named-command-hook - (lambda (hook) - (when-let (((symbolp hook)) - (which-func (get hook 'eshell-which-function)) - (result (funcall which-func command))) - (throw 'found result)))) - (eshell-plain-command--which name))) - (error (eshell-error (format "which: %s\n" (cadr error))))))) + (let (not-found) + (dolist (name (cons command names)) + (condition-case error + (eshell-printn + (catch 'found + (run-hook-wrapped + 'eshell-named-command-hook + (lambda (hook) + (when-let* (((symbolp hook)) + (which-func (get hook 'eshell-which-function)) + (result (funcall which-func command))) + (throw 'found result)))) + (eshell-plain-command--which name))) + (error (eshell-error (format "which: %s\n" (cadr error))) + (setq not-found t)))) + (when not-found (eshell-set-exit-info 1)))) (put 'eshell/which 'eshell-no-numeric-conversions t) -- 2.39.2