【问题标题】:how to run execlp with arguments from command如何使用命令中的参数运行 execlp
【发布时间】:2013-11-04 18:51:53
【问题描述】:

我正在尝试创建一个简单的程序,该程序将从参数运行 shell 命令,例如

./run date +"%r"

 07:56:05 PM

但我不知道怎么做。我试试这个,但它不起作用。我很困惑,完全不知道 exec 是如何工作的..

#include <unistd.h>
#include <stdio.h>

int main (int argc, char *argv[]){

    execlp("bash","bash", "argv[1]", (char*)0);  


    return 0;
}

【问题讨论】:

  • 您不应将argv[1] 放在引号中。
  • 你能用 execvp 代替吗?那会更容易。

标签: c shell exec gnu


【解决方案1】:

您的意思可能是(注意argv[1] 周围没有引号):

execlp("bash", "myprogram", argv[1], NULL);

请注意,我在这里假设myprogram 是一个shell 脚本。如果它是二进制文件,则应删除前面的 "bash" 参数。

一种很好的故障排除技术可能是将bash 替换为echo 以确认命令行。

【讨论】:

  • 感谢您的回答。我会尽快尝试,但您的代码输出是错误的。例如:“./myprogram ls” 输出“/bin/ls: /bin/ls: 无法执行二进制文件”
  • 删除第一个 "bash" 参数 - bash 无法以这种方式执行二进制文件。
  • 但这正是我想要的,从 myprogram 参数执行 shellscript 命令,而不仅仅是写出来。
  • 同样,如果您打算运行一个 shell 脚本,请在命令行中添加 bash。否则(如果你想execlp()一个二进制文件),直接执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多