gpt4 book ai didi

c - 使用 C 和 Linux 环境变量运行两个命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:22 24 4
gpt4 key购买 nike

我正在尝试使用 C 程序和 Linux 环境变量运行两个命令:

#Program name is execute
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char *argv[])
{

char cmd[256] = "/home/username/hello.sh $USER";
execl("/bin/bash", "bash", "-p", "-c", cmd, NULL);

return 0;
}

但是,在 $USER 环境变量设置为第二个命令的情况下运行程序时,第二个命令将不会运行。

env USER=";cat /home/username/hello.txt" ./execute
Hello from shell script

将第二个命令硬编码到 C 程序中是可行的:

char cmd[256] = "/home/username/hello.sh ;cat /home/username/hello.txt";

./execute
Hello from shell script
Hello from text file

我希望我的 C 程序返回:

env USER=";cat /home/username/hello.txt" ./execute
Hello from shell script
Hello from text file

如何在不更改 C 程序的情况下让它工作?

最佳答案

对扩展变量的结果进行的唯一处理是分词和通配。它不处理像 ; 这样的字符来分隔命令,> 用于输出重定向,$ 用于进一步的变量扩展等。

如果你想强制完整解析命令,你必须使用eval

  char cmd[256] = "eval /home/username/hello.sh $USER";
execl("/bin/bash", "bash", "-p", "-c", cmd, (char*)NULL);

关于c - 使用 C 和 Linux 环境变量运行两个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045456/

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