Shell 如果环境没有定义默认路径,那么使用什么样的默认路径?

Shell 如果环境没有定义默认路径,那么使用什么样的默认路径?,shell,Shell,我正在为一个学校项目制作一个小外壳,我正在搜索默认的PATHs。假设在全局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

我正在为一个学校项目制作一个小外壳,我正在搜索默认的
PATH
s。假设在全局
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   includes
Z Shell在
$PATH
中的元素最多,但它可能正在读取我的一些默认zsh配置文件(不太可靠的示例):

TC外壳的行为与C外壳相同

dflt-zsh > env -i tcsh
> echo $PATH
PATH: Undefined variable.
> ls
Makefile   shell.c   src   includes
哪种“默认路径”即使未设置也可以搜索?我是沿着路径=/usr/local/bin:/bin:/usr/bin:.

如何选择默认情况下要包含的目录?有一些重要的目录需要搜索吗?主要问题:是“选择你喜欢的”,还是所有shell都遵循一些基本规则?


谢谢你的帮助

没有通用的解决方案。在某些系统上,
/bin
是指向
/usr/bin
的符号链接,因此只需将
/usr/bin
添加到
路径
即可获得大部分程序。添加
/usr/gnu/bin
/usr/local/bin
是可选的;并不是所有的系统都有这两者中的一个或两个。有时人们会添加
/sbin
/usr/sbin
。变化的清单还在继续。基本的最小路径设置通常为:

/bin:/usr/bin

任何额外的东西都是额外的。(如前所述,在某些系统上,这不是一条最短路径。)

框架中的问题太模糊了。什么更好?它只是dependsI更新了这个问题,强调我真正要搜索的是所有shell是否遵循默认路径的基本规则…?大多数shell都有一组内置命令。使用which命令确定某个命令是程序还是内置命令。@luserdroog这不是我问题的核心。另外,当在bash、csh、sh、zsh上测试
哪个ls
时,它总是指向
/bin/ls
,因此它看起来不是内置的……这就是为什么我转换为注释(并删除了关于
ls
的错误声明)。我知道这不是问题的核心,但我认为这是相关的。
/bin:/usr/bin