iDe*_*247 10 shell bash sudo symbolic-link
我创建了一个符号链接:
ln -s /tmp/folder1 /tmp/folder2
然后我去 /tmp/folder2 并运行pwd:
$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part
Run Code Online (Sandbox Code Playgroud)
为什么pwdwithsudo给了原目录?我正在编写一个 bash 脚本,需要当前目录的绝对路径。使用 sudo 我似乎无法获得原始目录。
use*_*517 14
该PWD命令既是内置和/ bin中/密码壳。在正常情况下,内置命令会优先于 /bin/pwd 运行。pwd 命令可以调用为pwd -L或pwd -P内置和 /bin/pwd 默认为pwd -L来自手册页
-L, --logical 使用环境中的 PWD,即使它包含符号链接
因此,当您运行 pwd 时,您实际上运行了 pwd -L,它实际上会打印 $PWD(如果存在)。当您运行时sudo pwd,sudo 仅提供被告知通过env_keep指令传递的环境变量。PWD 通常不在此列表中,因此 sudo pwd 必须找出它的位置,并且实际上运行为pwd -P
-P, --physical 避免所有符号链接
解决问题的方法是,pwd -P如果您始终想要物理目录路径,或者(如@Felix 所说)将 PWD 添加到环境变量列表中,以通过 sudoers 中的 env_keep 指令保留
env_keep += "PWD"
Run Code Online (Sandbox Code Playgroud)
在 bash 中,pwd是一个内置函数。/bin/pwd产生与 相同的行为sudo pwd。
你会想要
sudo pwd -L,只有当你Defaults env_keep=PWD在您的sudoers文件中| 归档时间: |
|
| 查看次数: |
3378 次 |
| 最近记录: |