diff --git a/job.c b/job.c index 05f9ba7e..17f4eaa7 100644 --- a/job.c +++ b/job.c @@ -139,9 +139,13 @@ job_run(const char *cmd, int argc, char **argv, struct environ *e, proc_clear_signals(server_proc, 1); sigprocmask(SIG_SETMASK, &oldset, NULL); - if ((cwd == NULL || chdir(cwd) != 0) && - ((home = find_home()) == NULL || chdir(home) != 0) && - chdir("/") != 0) + if (chdir(cwd) == 0) + environ_set(env, "PWD", 0, "%s", cwd); + else if ((home = find_home()) != NULL && chdir(home) == 0) + environ_set(env, "PWD", 0, "%s", home); + else if (chdir("/") == 0) + environ_set(env, "PWD", 0, "/"); + else fatal("chdir failed"); environ_push(env);