我正在为一个学校项目做一个小shell,我正在搜索默认的PATH。假设全局environ变量中没有PATH,我测试的各种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当未定义路径但仍然找到ls可执行文件时,C Shell似乎会丢失:
dflt-zsh > env -i csh
% echo $PATH
PATH: Undefined variable.
% ls
Makefile shell.c src includeszsh在$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: lsTC 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:.的事情
默认情况下,如何选择包含哪些目录?是否有重要的目录可供搜索?主要问题:是“选择你喜欢的”,还是所有的shell都遵循什么基本规则?
谢谢你的帮助!
发布于 2013-12-28 16:50:24
没有普遍的解决办法。在某些系统中,/bin是/usr/bin的一个符号链接,因此向PATH添加/usr/bin将使您获得大部分程序。添加/usr/gnu/bin或/usr/local/bin是可选的;并不是所有的系统都有这两种方法。有时人们会添加/sbin和/usr/sbin。变体的列表还在继续。基本的最小路径设置通常是:
/bin:/usr/bin任何额外的东西都是-额外的。(正如前面提到的,在某些系统中,这不是最小的路径。)
https://stackoverflow.com/questions/20816792
复制相似问题