Provavelmente este é o comportamento de sobras há muito tempo, quando o bash implementou pela primeira vez OLDPWD
. As notas de lançamento do bash 2.03 alpha (em 1999) indicam que OLDPWD
anteriormente não era uma variável exportada. Se não foi exportado, não seria herdado por um processo filho.
A julgar pelo comentário sobre este pedaço da fonte de bash, o comportamento é intencional:
/* According to the Single Unix Specification, v2, $OLDPWD is an
'environment variable' and therefore should be auto-exported.
Make a dummy invisible variable for OLDPWD, and mark it as exported. */
temp_var = bind_variable ("OLDPWD", (char *)NULL, 0);
VSETATTR (temp_var, (att_exported | att_invisible));
Embora a nota de lançamento indique que a exportação foi feita para seguir o POSIX.2, OLDPWD
não aparece na lista de shell variáveis para o shell POSIX. Ele aparece na descrição de cd
. Isso não menciona se um valor inicial deve ser obtido de um processo pai; não há nenhum comportamento específico que seja necessário.
Não parece ser uma característica documentada do bash; há poucos comentários a serem encontrados:
- Perda de OLDPWD em Erlang no MacOSX
-
... 'OLDPWD não definido' ... , apontando que inicialmente o shell filho tem nenhum comando
cd
anterior para definir$OLDPWD
.