他们处理来自PATH的可执行elf,脚本和符号链接,但是这个算法是做什么的? 我害怕我找不到这部分shell的源代码。
答案 0 :(得分:4)
嗯,实际搜索由findcmd.c:553中的find_user_command_in_path()
执行。
搜索命令${foo}
的算法基本上是:
${foo}
是绝对的:如果它返回此路径并停止搜索for p in ${PATH}
${p}/${foo}
并查看它是否存在
答案 1 :(得分:0)
我不是这方面的专家,但我几乎完全相信在Linux上,文件权限中的可执行位是最重要的。无需复杂的算法。
答案 2 :(得分:0)
假设我们在当前目录中有一个名为hello的文件,并且该文件只包含一行:echo" hello"
如果你在文件上运行了chmod 755并且随后执行了该文件,那么bash shell将查看你在.bashrc的PATH变量中列出的每个路径,从第一个路径开始,直到找到包含hello可执行文件的第一个路径。将PATH视为链接列表,并将bash shell视为通过路径的链接列表,路径路径。如果bash shell没有运行你希望它运行的hello可执行文件,你有一个选择:把hello可执行文件放在任何一个前面的路径中。
我很懒。我不打算把你好打成一个可执行文件,即我没有运行chmod命令,我只是运行
bash你好
其中bash shell将在当前目录中查找hello文件,fork一个bash进程,forked bash进程将在forked bash进程终止之前运行hello文件。
我使用bash shell作为示例,但任何其他shell的行为方式都相同。