我正在创建一个shell副本,我有一个问题,可执行自制程序。我的意思是,当我想执行诸如java
,ls
,wc
之类的东西时,一切都很好......等等已经存在于PATH变量中的东西。
现在我希望能够执行“myls”命令,该命令是原始ls
的副本。问题是我的程序没有在PATH变量中注册,所以当我尝试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
答案 0 :(得分:2)
要允许使用execvp()
执行程序,您必须:
$PATH
,$PATH
,/some/where/useful/myLs
),../useful/myLs
甚至./myLs
)。请注意,execvp()
仅在$PATH
上搜索时看到的命令名称不包含/
(因此./myLs
会停止查看$PATH
)。相对名称通常最不实用;如果更改目录,则相对路径名可能会更改。
如有疑问,请确保您有一个目录$HOME/bin
,将您的程序放入其中(或将符号链接添加到您的程序中),并将$HOME/bin
添加到您的路径中。它生活在我的PATH前面;我想我知道自己在做什么。