我正在尝试了解如何使用sh -c
或bash -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/