有些linux命令需要显式路径,有些则不需要

有些linux命令需要显式路径,有些则不需要

我不明白为什么有些 bash 命令需要显式路径,而有些则不需要。

是否有需要显式路径的完整命令列表?

工作示例:

chmod +x 2copyQ.tmp.sh ; 
./2copyQ.tmp.sh ;

这是有效的或者它说No such file or directory

示例不起作用:

chmod +x 2copyQ.tmp.sh ; 
2copyQ.tmp.sh ;
2copyQ.tmp.sh: command not found

答案1

是否有需要显式路径的完整命令列表?

简短的回答:没有这样的列表。

长答案:

在大多数交互式 shell 中,命令是使用$PATH变量搜索的。PATH是一个冒号分隔的目录列表,用于查找可执行文件。

样本 PATH看起来像

 /home/archemar/bin:/usr/local/bin:/usr/sbin:/usr/bin

(实际PATH要长得多)

当你发出命令时foo

  1. shell 将从左到右搜索foo中列出的目录中指定的可执行文件PATH,默默地忽略不存在的目录。
  2. 如果找到可执行文件foo,shell 将运行它。
  3. 如果没有找到,你会得到foo: command not found错误。

如果您使用相对文件名 ( game1/foo, ./foo) 或绝对文件名 ( /opt/tomcat/bin/start.sh),shell 将查找该文件并执行它(如果未找到则抱怨)。

如果你想让 shell 在当前目录中查找可执行文件,只需添加.(local dir) in PATH,例如

.:/home/archemar/bin:/usr/local/bin:/usr/sbin:/usr/bin

请注意,出于安全原因,添加.PATH认为是一种不好的做法。

相关内容