linux当前目录下的可执行文件不能直接执行的原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux当前目录下的可执行文件不能直接执行的原因相关的知识,希望对你有一定的参考价值。

参考技术A linux的当前目录下有个可执行的文件:example。需使用./example来执行他(就是要指明路径),而不能仅用example。

原因:
如果在dos下执行一个文件,缺省情况下是先在当前目录下寻找,找不到的话在再PATH环境变量中寻找。而linux下运行可执行文件的逻辑是直接只在环境变量中寻找。要执行一个可执行文件要么其在PATH路径中,这种情况可以直接写文件名;要么指明完整路径。(一直以WIN上的观念来理解,以为会搜索当前目录,所以直接敲可执行文件的名字,老是报command not found!)所以如果某个可执行文件不在环境变量设置的目录下面的话。就不能直接使用其文件名来运行(即使在当前目录下也不行),需指定文件路径(相对和绝对都可)。要想在当前目录下直接写文件名,可将“./”加入PATH,但一般不建议这么做。

在linux平台下,我们编译的可执行bin文件,如果需要运行,则直接./test 即可运行, 如果我们不想加上./怎么直接运行test这个bin呢?
我们先来分析下这个./test是啥意思,首先test是可执行bin的名字,./表示当前目录,那么简单了,其实./就是告知test的路径。
我们可以echo $PATH, 可以查看当前设置的环境变量,我们吧test的路径,加入到PATH变量中去,那么就可以直接执行test了。

脚本 sh 和 ./ 的区别

如果.不在PATH里面,要执行当前目录下的可执行文件,使用全路径:

./executable-file

PATH是环境变量,如果将当前目录“./”添加到环境变量中,那么也可以不用“./”,直接输入当前目录下有可执行权限的可执行文件就可以运行了

如果要执行一个sh脚本,不管那个脚本有没有可执行权限,都可以使用:

sh [file]

这时file是作为参数传给sh的,如果file不在当前目录下,也需要使用全路径。

全路径有绝对路径和相对路径两种。./和../开头的都是相对路径,分别表示”在当前目录下”和”在父目录下”。

以上是关于linux当前目录下的可执行文件不能直接执行的原因的主要内容,如果未能解决你的问题,请参考以下文章

Linux 下执行本目录的可执行文件(命令)为什么需要在文件名前加“./”

小黑的日常折腾-复制外部命令的可执行文件和依赖库文件到指定目录下的对应目录

Linux命令

在linux中怎么使用sh执行当前目录的程序

Linux命令--ls命令:显示当前目录下的文件

linux shell命令