将值从C变量传递到嵌入式Shell脚本?

时间:2018-11-10 09:07:13

标签: c bash arguments

这可能吗?

这里是一个例子:

#include <stdio.h>
#include <stdlib.h>

char testString[]="blunt"

#define shellscript1 "\
#/bin/bash \n\
printf \"\nHi! The passed value is: $1\n\" \n\
"

int main(){

    system(shellscript1);

    return 0;
}

现在,我想将值从testString传递到shellscript1,而不必保留制作临时外部脚本的作用。

我一直在 扑扑 ,但我不知道该怎么做。有人有什么想法吗?

1 个答案:

答案 0 :(得分:4)

使用环境可能是实现环境的最简单方法。

#include <stdio.h>
#include <stdlib.h>

char testString[]="blunt";
#define shellscript1 "bash -c 'printf \"\nHi! The passed value is: $testString\n\"'"
int main()
{
    if(0>setenv("testString",testString,1)) return EXIT_FAILURE;
    if(0!=system(shellscript1)) return EXIT_FAILURE;
    return 0;
}

还有其他方法,例如在缓冲区中生成system参数(例如,使用sprintf)或不使用system

system会将其自变量视为字符串,放在"/bin/sh", "-c"之后。在my answerusing system() with command line arguments in C中,我编写了一个简单的my_system替代方案,该替代方案将参数作为字符串数组。

使用它,您可以执行以下操作:

#define shellscript1 "printf \"\nHi! The passed value is: $1\n\" \n"
char testString[]="blunt";
int main()
{
    if(0!=my_system("bash", (char*[]){"bash", "-c", shellscript1, "--", testString,0})) return EXIT_FAILURE;
    return 0;
}