1

我写的代码片段是这样的:

#include <stdlib.h>

int main()
{
  system("/bin/bash ls");
}

当我编译并执行二进制文件时,我得到了结果: /bin/ls: /bin/ls: 无法执行二进制文件

那么这里缺少什么?

4

3 回答 3

5

ls是一个实际的系统二进制文件。它不是内置的 shell 命令。你只需要system("ls"). 现在您正尝试将ls二进制文件的内容作为脚本传递给 bash。

于 2012-12-03T18:06:46.740 回答
3

不要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 调用时不会这样做。)

在您的情况下,lsshell 中没有内置命令,因此system()无法正常工作。

您可以使用type <cmd_name>命令检查是否cmd_name是内置的。

更多人 system()

于 2012-12-03T18:13:39.037 回答
2

如果未指定任何选项,则 /bin/bash 的参数是包含要执行的 shell 命令的文件的名称。

要执行命令行上指定的命令,请使用-c选项:/bin/bash -c ls.

正如其他人所指出的,这样做时有安全考虑,因此您应该寻找替代方案。

于 2012-12-03T18:47:22.003 回答