我不明白为什么有些 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
,
- shell 将从左到右搜索
foo
中列出的目录中指定的可执行文件PATH
,默默地忽略不存在的目录。 - 如果找到可执行文件
foo
,shell 将运行它。 - 如果没有找到,你会得到
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
认为是一种不好的做法。