为什么/ usr / bin / cd不能转到$ OLDPWD

时间:2016-06-29 09:57:47

标签: bash

进入一些有趣的事情,我无法弄清楚原因。每当我使用bash的内置cd时,我都可以使用cd -,但是当我使用cd可执行文件时,它会输出错误信息:/usr/bin/cd: line 2: cd: OLDPWD not set

以下是成绩单:

$ cd /tmp
$ cd $HOME
$ echo $OLDPWD 
/tmp 
$ /usr/bin/cd - 
/usr/bin/cd: line 2: cd: OLDPWD not set 
$ declare -xp OLDPWD 
declare -x OLDPWD="/tmp"

2 个答案:

答案 0 :(得分:3)

我不确定这个cd可执行文件的来源,但它没有意义:它所能做的只是改变它自己的wd,而不是调用者(即shell)。所以cd必然是内置的,只能这样工作。

答案 1 :(得分:0)

在irc.freenode.net上的#bash找到答案

看起来/usr/bin/cd可执行文件不是真正的二进制文件:

$ cat /usr/bin/cd
#!/bin/sh
builtin cd "$@"

这意味着/ usr / bin / cd在运行sh的子shell中运行,每当sh启动时,它都会忽略/取消设置PWDOLDPWD父shell,因此它似乎找不到$OLDPWD