bash - "sh -c"不接受额外参数的问题,UNIX,使用 execve()

标签 bash unix arguments sh execve

我正在尝试了解如何使用sh -cbash -c正确地。

我可以轻松运行一个简单的命令,例如 "sh -c ls"没有参数。

当我尝试添加参数时,问题就出现了。 待办事项ls -ltga ,我必须这样做:

sh -c "ls -ltga"

这不会是一个大问题,除非我正在尝试编写自己的小 shell 程序, 当我使用execve时我尝试:

Argument #:  string
         0:  sh
         1:  -c
         2:  "ls
         3:  -ltga"

它给了我一个错误,说它在找到下一个 '"' 之前就达到了 EOF。

我也尝试过:

         0:  sh
         1:  -c
         2:  "ls -ltga"

它返回给我说它找不到名为 "ls -ltga" 的文件/脚本

有人知道我做错了什么吗?

最佳答案

您不应在 execve() 的参数内添加引号。它应该这样调用:

char *args = { "sh", "-c", "ls -ltga", 0};
execve("/bin/sh", args);

execve() 的第一个参数必须是可执行文件的路径(通常是完整路径)。

关于bash - "sh -c"不接受额外参数的问题,UNIX,使用 execve(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372691/

相关文章:

linux - 使用 linux bash 脚本清除存档文件

c++ - 对象是否会通过kill正确地被销毁?

linux - EXPECT 如何将转义字符解释为命令字符

Python 2.6 - 解析参数

linux - 如何在 Linux/OS X 上动态添加到 $PATH

bash - 如何创建文件名中包含空字节的文件?

bash - 生成新进程并返回到 Expect 脚本

linux - 编写一个 shell 脚本来搜索文件中的复杂字符串以及它的出现次数

JavaScript:获取传递变量的参数值和名称

Prolog 参数未充分实例化,R 为 [H|R1]