2017-12-27 133 views
0

我创建了一个shell副本,并且遇到了可执行自制程序的问题。我的意思是,当我想执行诸如javalswc等等的东西时,一切正常...... PATH变量中已经存在的所有东西。允许使用execvp执行程序

现在我想能够执行一个“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 
+2

要么将​​你的程序放在你的'$ PATH'目录下,要么把你的程序放在'$ PATH'上的目录,或者使用适当的路径名(相对或绝对)来标识要运行的程序。 –

回答

2

要允许与execvp()要执行的程序,你必须:

  • 或者把你的程序放在你的目录$PATH,
  • 或者把程序的目录放在你的$PATH,
  • 或安排使用程序的绝对路径名(),
  • 或者安排使用程序的正确相对路径名(../useful/myLs或甚至./myLs)。

注意当它看到的命令名称不包含/execvp()只搜索上$PATH(所以./myLs停止寻找它的$PATH)。相对的名字通常是最不有用的;如果更改目录,则相对路径名可能会发生更改。

如有疑问,请确保您有一个目录$HOME/bin,将您的程序放在那里(或符号链接到您的程序),并将$HOME/bin添加到您的路径。它生活在我的PATH的前面;我想我知道我在做什么。

+0

噢,这正是我一直在寻找的!谢谢你一切正在工作! – LenweSeregon

相关问题