diff options
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/shell/hush.c b/shell/hush.c index 5f9f2c5..9c70556 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -760,9 +760,11 @@ static int builtin_eval(char **argv) static int builtin_cd(char **argv) { const char *newdir; - if (argv[1] == NULL) + if (argv[1] == NULL) { + // bash does nothing (exitcode 0) if HOME is ""; if it's unset, + // bash says "bash: cd: HOME not set" and does nothing (exitcode 1) newdir = getenv("HOME") ? : "/"; - else + } else newdir = argv[1]; if (chdir(newdir)) { printf("cd: %s: %s\n", newdir, strerror(errno)); @@ -3629,7 +3631,7 @@ static void setup_job_control(void) saved_task_pgrp = shell_pgrp = getpgrp(); debug_printf_jobs("saved_task_pgrp=%d\n", saved_task_pgrp); - fcntl(interactive_fd, F_SETFD, FD_CLOEXEC); + close_on_exec_on(interactive_fd); /* If we were ran as 'hush &', * sleep until we are in the foreground. */ |