Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
can';t通过c标准系统函数执行bash命令_C - Fatal编程技术网

can';t通过c标准系统函数执行bash命令

can';t通过c标准系统函数执行bash命令,c,C,我编写的代码片段如下所示: #include <stdlib.h> int main() { system("/bin/bash ls"); } #包括 int main() { 系统(“/bin/bash ls”); } 当我编译并执行二进制文件时,我得到了以下结果: /bin/ls:/bin/ls:无法执行二进制文件 那么这里缺少什么呢?ls是一个实际的二进制系统。它不是一个内置的shell命令。您只需要系统(“ls”)。现在,您正试图将ls二进制文件的内容作为脚本传递

我编写的代码片段如下所示:

#include <stdlib.h>

int main()
{
  system("/bin/bash ls");
}
#包括
int main()
{
系统(“/bin/bash ls”);
}
当我编译并执行二进制文件时,我得到了以下结果: /bin/ls:/bin/ls:无法执行二进制文件


那么这里缺少什么呢?

ls
是一个实际的二进制系统。它不是一个内置的shell命令。您只需要
系统(“ls”)
。现在,您正试图将
ls
二进制文件的内容作为脚本传递到bash中。

ls
是一个实际的系统二进制文件。它不是一个内置的shell命令。您只需要
系统(“ls”)
。现在您正试图将
ls
二进制文件的内容作为脚本传递到bash中。

不要从程序中使用
system()
,因为某些环境变量的奇怪值可能会被用来破坏系统完整性。请改用
exec(3)
函数系列,但不要使用execlp(3)或execvp(3)。实际上,在
/bin/sh是bash版本2
的系统上,system()无法从具有set user ID或set group ID特权的程序正常工作,因为bash 2在
启动时会放弃特权。(Debian使用一个修改过的bash,当作为sh调用时,它不会这样做。)

在您的情况下,
ls
不是shell中内置的命令,因此
system()
不起作用

您可以使用
type
命令检查
cmd\u name
是否内置

有关更多信息,请不要从程序中使用
system()
,因为某些环境变量的奇怪值可能会被用来破坏系统完整性。请改用
exec(3)
函数系列,但不要使用execlp(3)或execvp(3)。实际上,在
/bin/sh是bash版本2
的系统上,system()无法从具有set user ID或set group ID特权的程序正常工作,因为bash 2在
启动时会放弃特权。(Debian使用一个修改过的bash,当作为sh调用时,它不会这样做。)

在您的情况下,
ls
不是shell中内置的命令,因此
system()
不起作用

您可以使用
type
命令检查
cmd\u name
是否内置


有关详细信息,如果未指定选项,/bin/bash的参数是包含要执行的shell命令的文件名

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


正如其他人所指出的,执行此操作时会考虑安全性,因此您应该寻找替代方案。

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

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


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

您是否尝试过不使用路径?系统(“ls”);你试过不走那条路吗?系统(“ls”)@西迪尔:嗯,为什么
echo“Hi”
echo“Hi”
在功能上是相同的。命令中没有变量,所以…?啊,伙计。。。这就是我2小时睡眠所得到的。对不起,你说得对。没问题;-)如果您愿意,我们可以删除这些评论want@Marc:如果我需要通过系统执行的命令类似于“/bin/bash unknown”,那么我如何知道未知是二进制还是bash内置?也许我可以执行哪些测试未知,但有更好的方法吗?@sidyll:嗯,为什么
echo“Hi”
echo“Hi”
在功能上是相同的。命令中没有变量,所以…?啊,伙计。。。这就是我2小时睡眠所得到的。对不起,你说得对。没问题;-)如果您愿意,我们可以删除这些评论want@Marc:如果我需要通过系统执行的命令类似于“/bin/bash unknown”,那么我如何知道未知是二进制还是bash内置?也许我可以执行哪些测试未知,但是有更好的方法吗?