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);