如果没有环境定义,那么使用什么是好的默认PATH?

时间:2013-12-28 16:33:59

标签: shell

我正在为学校项目制作一个小shell,我正在搜索默认的PATH。假设全局PATH变量中没有environ,我测试的各种shell总是设法搜索一些默认路径(有时是未知的)以查找要运行的可执行文件[ls被选为一个例子]:

Bash Shell的行为如下:

dflt-zsh > env -i bash
bash-3.2$ echo $PATH
/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:.
bash-3.2$ ls
Makefile   shell.c   src   includes
bash-3.2$ export PATH=
bash-3.2$ ls
bash: ls: No such file or directory

当没有定义PATH但是发现ls可执行文件时,C Shell似乎丢失了:

dflt-zsh > env -i csh
% echo $PATH
PATH: Undefined variable.
% ls
Makefile   shell.c   src   includes

Z Shell拥有$PATH中最多的元素,但它可能正在读取我的一些默认zsh配置文件(不是非常值得信赖的例子):

dflt-zsh > env -i zsh
achedeuzot% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/texbin
achedeuzot% ls
Makefile   shell.c   src   includes
achedeuzot% PATH=
achedeuzot% ls
zsh: command not found: ls

TC Shell表现为C shell。

dflt-zsh > env -i tcsh
> echo $PATH
PATH: Undefined variable.
> ls
Makefile   shell.c   src   includes

即使没有设置,搜索什么是好的“默认路径”?我正在寻找PATH=/usr/local/bin:/bin:/usr/bin:.

的内容

如何选择默认包含哪些目录?是否有一些重要的目录要搜索?主要问题:是“选择你喜欢的”还是有所有贝壳遵循的基本规则?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

没有通用的解决方案。在某些系统上,/bin/usr/bin的符号链接,因此只需将/usr/bin添加到PATH即可获得大部分程序。添加/usr/gnu/bin/usr/local/bin是可选的;并非所有系统都具有其中之一或两者。有时人们会添加/sbin/usr/sbin。变化列表继续。基本的最小PATH设置通常是:

/bin:/usr/bin

任何额外的东西正是 - 额外的。 (并且,如上所述,在某些系统上,这不是最小的PATH。)