我正在为学校项目制作一个小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:.
如何选择默认包含哪些目录?是否有一些重要的目录要搜索?主要问题:是“选择你喜欢的”还是有所有贝壳遵循的基本规则?
感谢您的帮助!
答案 0 :(得分:1)
没有通用的解决方案。在某些系统上,/bin
是/usr/bin
的符号链接,因此只需将/usr/bin
添加到PATH
即可获得大部分程序。添加/usr/gnu/bin
或/usr/local/bin
是可选的;并非所有系统都具有其中之一或两者。有时人们会添加/sbin
和/usr/sbin
。变化列表继续。基本的最小PATH设置通常是:
/bin:/usr/bin
任何额外的东西正是 - 额外的。 (并且,如上所述,在某些系统上,这不是最小的PATH。)