我创build了一个符号链接:
ln -s /tmp/folder1 /tmp/folder2
然后我去/ tmp / folder2并运行pwd :
$ cd /tmp/folder2/ $ pwd /tmp/folder2 $ sudo pwd /tmp/folder1 # <-- This is the odd part
为什么与sudo pwd给原来的目录? 我在写一个bash脚本,需要当前目录的绝对path。 用sudo我似乎无法获得原始目录。
pwd命令既是shell内build的,也是/ bin / pwd。 在正常情况下,内build将优先于/ bin / pwd运行。 pwd命令可以被称为pwd -L或pwd -P从手册页中内build和/ bin / pwd默认为pwd -L
-L, – 逻辑使用来自环境的PWD,即使它包含符号链接
所以当你运行pwd时,你实际上运行了pwd -L,它实际上打印了$ PWD(如果存在的话)。 当你运行sudo pwd ,sudo只提供已被告知通过env_keep指令传递的环境variables。 PWD通常不在这个列表中,所以sudo pwd必须确定它在哪里并且实际上以pwd -P运行
-P, – 物理避免所有符号链接
解决这个问题的方法是使用pwd -P如果你始终想要物理目录path,或者(像@Felix所说的那样)将PWD添加到环境variables列表中以通过env_keep指令保持sudoers
env_keep += "PWD"
在bash中, pwd是内build的。 /bin/pwd产生与sudo pwd相同的行为。
你会想
sudo pwd -L ,它只在你工作时才起作用 sudoers文件中包含Defaults env_keep=PWD