如何从终端中的任何目录运行linux可执行文件?

时间:2018-05-14 10:50:15

标签: linux

我知道像ls,cd等linux命令是可执行文件,可以从任何目录访问。我的问题是如何在终端的任何目录中运行我创建的可执行文件?

3 个答案:

答案 0 :(得分:3)

了解PATH variable。它可以由你的shell设置。使用echo $PATH检查其当前值。它也被几个exec(3)函数使用。顺便说一下,有一个很长的$PATH味道很糟糕而且很混乱(可能效率低下)。

如果你的登录shell是/bin/bash,你可以修改~/.bashrc(用于interactive shell s)来添加类似

的内容
 PATH="$PATH:/something/more"

但是在最近的几个Linux发行版中,$HOME/bin/目录已经是PATH的一部分,您可以在其中添加脚本,可执行文件或符号链接。

所以(在$HOME/bin中提到$PATH时)我不建议扩展您的PATH,而是在{{1}中添加适当的可执行文件,可执行脚本或符号链接目录。

当然,如果$HOME/bin/中有一些可执行文件,您仍然可以使用以$HOME/someproject/someprog开头的shell命令显式运行它。

您的build程序可能还有一些安装步骤。例如,如果您使用GNU make作为build automation,则Makefile中可能会有一个$HOME/someproject/someprog虚假目标,可将可执行文件编译后复制到适当的位置。另见hier(7)& install(1)autoconf

在某些现有free software的源代码中寻找灵感,例如在github

请注意,许多实用程序(例如install和您的crontab(5))都不使用您的交互式cron(但有些默认设置为默认值)。所以你可能想在使用crontab(1)时给出一些脚本的绝对路径。

答案 1 :(得分:1)

您的$PATH中必须提供可执行文件所在的目录。您可以通过修改shell的启动文件来更改路径(如果您使用~/.bash_profile,通常会~/.bashrcbash),添加

PATH="$PATH:/some/directory"

...其中/some/directory是可执行文件所在目录的路径。

更改将在您打开新(登录)shell时生效。

答案 2 :(得分:0)

ls从任何目录运行,因为无论何时执行任何程序文件,它都会首先查找当前目录。如果它在那里找到它将执行它,否则它会查看你的PATH变量然后尝试在那些目录中找到它然后执行它。 例如  ls不存在于当前目录中,但它存在于路径变量中提到的目录之一中。做,     echo $ PATH     / usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏 上面的输出显示它将检查" ls"在/ usr / sbin,/ usr / bin,/ sbin,/ bin 等等....

现在你可以做一些有趣的事情了     export PATH = 现在执行     LS     o / p:bash:ls:没有这样的文件或目录 因为ls不在您当前的目录中,并且PATH变量为空。 警告:在运行上述命令之前保存PATH变量值。