我正在创建一个外壳副本,我有一个可执行的自制程序的问题。我的意思是,当我想执行诸如 java
, ls
, wc
等之类的部分时,一切都还好...路径变量中已经存在的所有内容。
现在,我希望能够执行" myls"命令,该命令是原始ls
的副本。问题是我的程序未在路径变量中注册,因此当我尝试使用execvp("myls", …)
时,我会收到一个错误"无文件或目录"。
我想知道如何管理此问题并能够根据此层次结构执行我的命令:
src
include
bin
makefile
executable <- this one is my main executable
myLs
executableLS <- would like to be able to call this one through execvp
myPs
executablePS <- would like to be able to call this one through execvp
要允许使用execvp()
执行程序,您必须:
- 要么将您的程序放在您的
$PATH
上的目录中, - 或将程序存放在您的
$PATH
上的目录, - 或安排使用"绝对路径名"为程序(
/some/where/useful/myLs
), - 或安排对程序使用正确的相对路径名(
../useful/myLs
甚至./myLs
)。
请注意,execvp()
仅在$PATH
上搜索命令名称时,其中包含/
(因此./myLs
停止查看$PATH
)。相对名称通常最不可用;如果更改目录,相对路径名可能会更改。
如有疑问,请确保您有一个目录$HOME/bin
,将程序放入其中(或在其中的程序中链接),然后将$HOME/bin
添加到路径中。它生活在我的路前。我想我知道我在做什么。