Bash attempts to execute the stat syscall on the $OLDPWD variable on every startup. This results in hard to diagnose hangs if the $OLDPWD variable points to a directory on network filesystem that is inaccessible (for example sshfs or nfs).
How to reproduce the hang: - mount an sshfs directory /usr/src/git/bash# sshfs user@host:/ /mnt/test -o cache=no,reconnect - go to the mounted directory /usr/src/git/bash# cd /mnt/test - go back /mnt/test# cd - - disconnect the network cable (or shut down the remote host) - execute some command or script via bash /usr/src/git/bash# bash -c 'echo Hello World' - bash hangs, because it tries to execute stat("/mnt/test") Mikulas --- variables.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: bash/variables.c =================================================================== --- bash.orig/variables.c +++ bash/variables.c @@ -899,7 +899,7 @@ set_pwd () don't find OLDPWD in the environment, or it doesn't name a directory, make a dummy invisible variable for OLDPWD, and mark it as exported. */ temp_var = find_variable ("OLDPWD"); - if (temp_var == 0 || value_cell (temp_var) == 0 || file_isdir (value_cell (temp_var)) == 0) + if (temp_var == 0 || value_cell (temp_var) == 0) { temp_var = bind_variable ("OLDPWD", (char *)NULL, 0); VSETATTR (temp_var, (att_exported | att_invisible));