【问题标题】:How can I execute a cat command in a execlp in C?如何在 C 的 execlp 中执行 cat 命令?
【发布时间】:2022-01-11 02:55:42
【问题描述】:

我正在尝试执行从终端传递到 argv 的命令,这些命令由 : 分隔,更具体的是 cat nevermind : grep left : wc -c

tabCommand 是一个包含每个命令的数组,所以cat nevermind,grep left,wc -c

使用 printf 我可以确认 tabCommand[i-1] 不等于 cat nevermind 但我得到的输出是 Error: No such file or directory

 if (execl(tabCommande[i-1],tabCommande[i-1], (char *)NULL) == -1) {
        error_and_exit();
 }

如果有人能帮我找到问题,我将不胜感激。

【问题讨论】:

  • 这似乎是一个 C 问题,而不是关于 Unix&Linux 的问题。我已投票支持将其移至 SO。
  • 我是这个平台的新手怎么搬家呢?
  • execl 的第一个参数是可执行文件的名称,而不是要解析的命令。你正试图执行一个名为“cat nevermind”的命令,而你真的想要execl cat 第一个参数是“nevermind”。
  • 如果我硬编码`execl("cat","nevermind", (char *)NULL)` 我仍然得到同样的错误你知道什么是正确的语法吗?或者使用 execlp
  • 使用cat的完整路径,您可以使用type -p cat找到它。

标签: linux c exec


【解决方案1】:

通过我在帖子中得到的 cmets,我设法找到了我的问题

execlp("/bin/sh","sh","-c",tabCommande[i], (char *)NULL) 有效,因为我需要使用完整路径。 如果我这样做 execlp(tabCommande[i],tabCommande[i], (char *)NULL) 它将不起作用,因为我没有使用每个命令的完整路径,所以简单地将 cat 提供给 execlp 将不起作用。

感谢waltinator找到了这个答案我是新手,所以我不知道如何给你信用

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2011-12-07
    • 2022-01-12
    相关资源
    最近更新 更多