我知道像ls,cd等linux命令是可执行文件,可以从任何目录访问。我的问题是如何在终端的任何目录中运行我创建的可执行文件?
答案 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
,通常会~/.bashrc
或bash
),添加
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变量值。