0

我正在创建一个 shell 副本,但在执行自制程序时遇到问题。我的意思是,当我想执行诸如javalswc等之类的东西时,一切都很好...... 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
4

1 回答 1

2

要允许使用 执行程序execvp(),您必须:

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

请注意,仅当它看到的命令名称包含 noexecvp()时才搜索(因此停止查找)。相对名称通常最没用;如果您更改目录,则相对路径名可能会更改。$PATH/./myLs$PATH

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

于 2017-12-27T16:19:12.537 回答