gpt4 book ai didi

linux - 为什么 env -i 与命令手册不匹配

转载 作者:太空狗 更新时间:2023-10-29 11:12:44 26 4
gpt4 key购买 nike

我已经阅读了 linux 命令 env 手册,具体来说,对于 -i 选项,手册说:

-i, --ignore-environment # start with an empty environment

我得到的是,当指定 -i 选项时,环境是空的,即没有环境变量,所以命令 env -i ls 应该打印类似 command not found 的内容,但我看到的是命令成功执行。所以请解释一下,我有没有误解什么?

最佳答案

I think it better to read the source code to find out whether the OS PATH variable persists through a clearing of environment – Tracy

阅读源代码当然会提供有关此事的所有信息。但是我们也可以通过使用strace获取有值(value)的线索:

>strace -eexecve env -i ls       execve("/usr/bin/env", ["env", "-i", "ls"], [/* 48 vars */]) = 0execve("ls", ["ls"], [/* 0 vars */])    = -1 ENOENT (No such file or directory)execve("/bin/ls", ["ls"], [/* 0 vars */]) = 0

我们看到 env 首先尝试在没有路径的情况下执行 "ls",但失败了,然后尝试执行 "/bin/ls",成功。我们还看到它从一个空环境开始 [/* 0 vars */]

>strace -eexecve env -i foo  execve("/usr/bin/env", ["env", "-i", "foo"], [/* 48 vars */]) = 0execve("foo", ["foo"], [/* 0 vars */])  = -1 ENOENT (No such file or directory)execve("/bin/foo", ["foo"], [/* 0 vars */]) = -1 ENOENT (No such file or directory)execve("/usr/bin/foo", ["foo"], [/* 0 vars */]) = -1 ENOENT (No such file or directory)env: foo: No such file or directory

当指定一个不存在的命令或驻留在其他路径中的命令时,我们看到 env 最终尝试了 /usr/bin/ 路径,仅此而已.所以,显然 /bin//usr/bin/ 是在 env 中硬编码的,而 -i命令的环境确实是空的。另一个测试:

>env -i strace lsstrace: ls: command not found

如果 ls 不是由 env -i 直接执行,而是通过另一个命令间接执行,则找不到。

关于linux - 为什么 env -i 与命令手册不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38745894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com