diff --git a/src/code/run-program.lisp b/src/code/run-program.lisp
index 23abdb349adb29580cb7be5b5721d64985a394e4..9382763720f0dd4efe0bd748435c6699872a4b1f 100644
--- a/src/code/run-program.lisp
+++ b/src/code/run-program.lisp
@@ -528,10 +528,7 @@
   ;; info.  Also, establish proc at this level so we can return it.
   (let (*close-on-error* *close-in-parent* *handlers-installed* proc)
     (unwind-protect
-	(let ((pfile (unix-namestring (merge-pathnames program "path:") t t))
-	      (cookie (list 0)))
-	  (unless pfile
-	    (error (intl:gettext "No such program: ~S") program))
+	(let ((cookie (list 0)))
 	  (multiple-value-bind
 	      (stdin input-stream)
 	      (get-descriptor-for input cookie :direction :input
@@ -570,7 +567,7 @@
 					env))
 			(let ((child-pid
 			       (without-gcing
-				(spawn pfile argv envp pty-name
+				(spawn program argv envp pty-name
 				       stdin stdout stderr))))
 			  (when (< child-pid 0)
 			    (error (intl:gettext "Could not fork child process: ~A")
diff --git a/src/lisp/runprog.c b/src/lisp/runprog.c
index 556c34e0b35fd38a2433eb003cd75296c6c84825..61a9bb8df48a672d6a2d00840f3a14442f37d27e 100644
--- a/src/lisp/runprog.c
+++ b/src/lisp/runprog.c
@@ -65,10 +65,10 @@ spawn(char *program, char *argv[], char *envp[], char *pty_name,
     /* Exec the program. */
     execve(program, argv, envp);
 
-    /* It didn't work, so try /bin/sh. */
+    /* It didn't work, so try /usr/bin/env. */
     argv[0] = program;
-    argv[-1] = "sh";
-    execve("/bin/sh", argv - 1, envp);
+    argv[-1] = "/usr/bin/env";
+    execve("/usr/bin/env", argv - 1, envp);
 
     /* The exec didn't work, flame out. */
     exit(1);