gpt4 book ai didi

c - 使用 execlp() 从字符串运行 shell 命令

转载 作者:行者123 更新时间:2023-11-30 18:13:51 25 4
gpt4 key购买 nike

我正在尝试让我的程序使用 exelp() 运行 shell 命令。用户基本上输入一个 shell 命令,该命令被存储,然后由新 shell 中的 exelp() 执行。

假设用户输入“ls -l/bin/??”,该输入又被变量 command[] 捕获。我怎样才能让这个文本字符串在 shell 环境中执行。

我最了解如何做到这一点是通过执行 execlp("/bin/sh", "-c", command, (char *)NULL); ,其中/bin/sh 启动一个迷你 shell,-c 使 shell 能够获取字符串,倒数第二个参数只是之前捕获的字符串。我知道 system() 是这里的一个选项,但出于教育目的,我想使用 execlp 来执行此操作。

我在这里缺少什么?提前致谢。

最佳答案

也许您想知道如何在 C 程序中将 shell 字扩展为参数子序列。请参阅glob(7)

然后考虑glob(3)wordexp(3)

您应该意识到,当您输入 ls -l/bin/?? 时,shell 有责任扩展 ??; /bin/ls 程序是 execve(2) -ed 是由 shell 完成的扩展结果 ...

或者,您可以将其留给由 system(3) 启动的 /bin/sh -c shell或popen(3)功能。如果您将一些用户输入传递给这些函数,请注意 code injection并适当引用任何用户输入。想象一下,您运行一个由 ls -l 和一些用户输入组成的字符串;如果恶意用户给出a; rm -rf $HOME 作为文件名,如果您不引用它,您会感到抱歉(因为如果不采取预防措施,您的程序将构建 ls -l a; rm -rf $HOME然后命令字符串将该字符串传递给 systempopen,然后灾难就会发生)。

关于c - 使用 execlp() 从字符串运行 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21568524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com