gpt4 book ai didi

c - 如何在不考虑空格的情况下运行 bash 命令

转载 作者:行者123 更新时间:2023-11-30 21:19:19 24 4
gpt4 key购买 nike

我正在使用系统命令编写 C 程序。我已将其配置为 sh -c 。这不适用于带有空格的命令。是否有一个命令可以在 shell 上运行带有空格的命令,无论它是否有空格。我目前正在使用 sh -c 命令,如下所示:

char s[500];
strcpy (s, "sh -c");
strcat (s, i);
system (s);

最佳答案

system(str) 始终调用sh -c "$str"。这就是它的作用。

您在这里所做的是sh -c "sh -c$str"。在这种情况下,为什么这个被破坏应该是显而易见的。

此外,sh 不是 bash —— 在许多操作系统上,它是完全不同的 shell,例如 ashdash,甚至在它由 bash 包提供,当在 sh 名称下调用时,它以 POSIX 兼容模式运行,具有不同的功能。

<小时/>

如果您想从 C 程序调用 bash,请根本不要使用 system()

#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>

/* Here's our actual shell script.
* Note that it's a constant string; this is CRITICAL for security.
* Do not UNDER ANY CIRCUMSTANCES concatenate untrusted data with this string; instead,
* use placeholders ($1, $2, etc) to pull in other data.
*/
const char* bash_script = "printf '%s\n' \"First argument: $1\" \"Second argument: $2\"";

int main(void) {

int pid = fork(); /* if we didn't fork, execlp() would end our program */
if (pid == 0) { /* if we're the child process fork() created... */
execlp("bash", /* command to invoke; in exec*p, found in PATH */
"bash", "-c", bash_script, /* actually running bash with our script */
"bash", /* $0 for the script is "bash"; "_" also common */
"Argument One", /* $1 for the script */
"Argument Two", /* $2 for the script */
NULL /* NUL terminator for argument list */
);
} else {
int exit=0;
waitpid(pid, &exit, 0);
printf("Shell exited with status: %d\n", exit);
}
}

您可以在 https://ideone.com/UXxH02 看到它正在运行

关于c - 如何在不考虑空格的情况下运行 bash 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52841139/

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