Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LinuxEnv-i奇怪之处_Linux_Shell_Environment - Fatal编程技术网

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
也能起作用。

一个“空环境”并不是那么回事

从for
env
,可以看到它运行:

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
(My
env-i which date
的行为与您的不同,可能是由于实现了
which

在我的测试中,默认路径包括当前目录。但是,任何不在系统默认路径中的命令,如
~/bin
中的命令,都会在
env-i
下失败