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 下执行本目录的可执行文件(命令)为什么需要在文件名前加“./”