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内置?也许我可以执行哪些测试未知,但是有更好的方法吗?