I don't know if it is the right way to fix the following pb : term% pwd /sys/src/cmd/rc term% cat /dev/wdir /sys/src/cmd/rcterm% term% @{ cd .. } term% cat /dev/wdir /sys/src/cmdterm% term% pwd /sys/src/cmd/rc Notes: Fri Mar 10 11:46:08 EST 2006 rsc This is definitely not correct. You can't re-chdir after every single command. That's going to slow tons of stuff, and it breaks interacting with acme (try cd /dev/acme/new multiple times). Even rewriting /dev/wdir after every command seems like overkill to me. The vast majority leave /dev/wdir correct. I don't think there's a good solution. This one creates more problems than it solves (as do most). Reference: /n/sources/patch/sorry/rc-restore-wdir-after-fork Date: Fri Mar 10 00:58:21 CET 2006 Signed-off-by: xigh@free.fr Reviewed-by: rsc --- /sys/src/cmd/rc/havefork.c Fri Mar 10 00:49:47 2006 +++ /sys/src/cmd/rc/havefork.c Fri Mar 10 00:49:44 2006 @@ -171,10 +171,13 @@ } } +extern int dochdir(char *); + void Xsubshell(void) { int pid; + char owd[512]; switch(pid = fork()){ case -1: Xerror("try again"); @@ -184,7 +187,9 @@ runq->ret = 0; break; default: + getwd(owd, sizeof owd); Waitfor(pid, 1); + dochdir(owd); runq->pc = runq->code[runq->pc].i; break; }