这可能吗?
这里是一个例子:
#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
,而不必保留制作临时外部脚本的作用。
我一直在 扑扑 ,但我不知道该怎么做。有人有什么想法吗?
答案 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 answer至using 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;
}