进入一些有趣的事情,我无法弄清楚原因。每当我使用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"
答案 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
启动时,它都会忽略/取消设置PWD
和OLDPWD
父shell,因此它似乎找不到$OLDPWD