允许使用 execvp 执行程序

Allow program to be executed with execvp

我正在创建一个 shell 副本,但我无法执行自制程序。我的意思是,当我想执行诸如 javalswc 等之类的操作时,一切正常……PATH 变量中已经存在的所有内容。

现在我希望能够执行 "myls" 命令,它是原始 ls 的副本。问题是我的程序没有在 PATH 变量中注册,所以当我尝试 execvp("myls", …) 时,我得到一个错误 "no such file or directory".

我想知道如何解决这个问题并能够根据此层次结构执行我的命令:

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 添加到您的路径。它位于我 PATH 的前面;我假设我知道我在做什么。