LinuxEnv-i奇怪之处
这与预期的效果一样:LinuxEnv-i奇怪之处,linux,shell,environment,Linux,Shell,Environment,这与预期的效果一样: [dgorur@ted ~]$ env -i env [dgorur@ted ~]$ 正如这一点: [dgorur@ted ~]$ env -i which date which: no date in ((null)) 但看看这个: [dgorur@ted ~]$ env -i date Fri Aug 28 22:27:15 PDT 2015 有趣。这个怎么样: [dgorur@ted ~]$ env -i whereis date date: /bin/da
[dgorur@ted ~]$ env -i env
[dgorur@ted ~]$
正如这一点:
[dgorur@ted ~]$ env -i which date
which: no date in ((null))
但看看这个:
[dgorur@ted ~]$ env -i date
Fri Aug 28 22:27:15 PDT 2015
有趣。这个怎么样:
[dgorur@ted ~]$ env -i whereis date
date: /bin/date /opt/rocks/bin/date /usr/share/man/man1p/date.1p.gz /usr/share/man/man1/date.1.gz
发生什么事了?难道一个空的环境并不意味着人们会认为它是什么,或者某些命令是特殊的吗?噢,ls
也能起作用。一个“空环境”并不是那么回事
从forenv
,可以看到它运行:
execvp (argv[optind], &argv[optind]);
如果其中一个依次读取man execvp
,则发现如果您不提供路径,它将创建自己的路径:
如果指定的文件名不包含斜杠,则execlp()、execvp()和execvpe()函数将复制shell在搜索可执行文件时的操作
(/)字符。在PATH环境变量中指定的以冒号分隔的目录路径名列表中查找该文件。如果未定义此变量,则路径
列表默认为当前目录,后跟confstr(_CS_PATH)返回的目录列表。(此confstr(3)调用通常返回值
“/bin:/usr/bin”。[添加强调符号。]
因此,默认路径中的程序工作正常:
$ env -i env
$ env -i which date
/bin/date
$ env -i date
Fri Aug 28 23:12:21 PDT 2015
(Myenv-i which date
的行为与您的不同,可能是由于实现了which
)
在我的测试中,默认路径包括当前目录。但是,任何不在系统默认路径中的命令,如~/bin
中的命令,都会在env-i
下失败