我写的代码片段是这样的:
#include <stdlib.h>
int main()
{
system("/bin/bash ls");
}
当我编译并执行二进制文件时,我得到了结果: /bin/ls: /bin/ls: 无法执行二进制文件
那么这里缺少什么?
我写的代码片段是这样的:
#include <stdlib.h>
int main()
{
system("/bin/bash ls");
}
当我编译并执行二进制文件时,我得到了结果: /bin/ls: /bin/ls: 无法执行二进制文件
那么这里缺少什么?
ls
是一个实际的系统二进制文件。它不是内置的 shell 命令。你只需要system("ls")
. 现在您正尝试将ls
二进制文件的内容作为脚本传递给 bash。
不要system()
从程序中使用,因为某些环境变量的奇怪值可能会被用来破坏系统完整性。请改用exec(3)
函数族,但不要使用 execlp(3) 或 execvp(3)。事实上,system() 不会在具有 set-user-ID 或 set-group-ID 权限的系统上正常工作/bin/sh is bash version 2
,因为 bash 2 在startup
. (Debian 使用修改后的 bash,它在作为 sh 调用时不会这样做。)
在您的情况下,ls
shell 中没有内置命令,因此system()
无法正常工作。
您可以使用type <cmd_name>
命令检查是否cmd_name
是内置的。
如果未指定任何选项,则 /bin/bash 的参数是包含要执行的 shell 命令的文件的名称。
要执行命令行上指定的命令,请使用-c
选项:/bin/bash -c ls
.
正如其他人所指出的,这样做时有安全考虑,因此您应该寻找替代方案。