在C程序和shell脚本之间共享头文件

在C程序和shell脚本之间共享头文件,c,bash,shell,header-files,named-pipes,C,Bash,Shell,Header Files,Named Pipes,如何与shell脚本共享C头文件 shell脚本通过命名管道与C程序通信。假设C程序将在C头文件中定义的enum SAMPLE_ONE写入管道。shell脚本从管道中读取枚举值。有没有办法在C程序和shell脚本之间共享头文件?这样我只需更新头文件一次,而不必在shell脚本中写入相同的头常量?请参见以下示例: $cat foo.h #定义枚举枚举 #定义逗号, 列举食物 { FOO_值1=11逗号 FOO_VALUE2=22逗号 FOO_值3=33 }; 要在C文件中使用: $cat foo

如何与shell脚本共享C头文件

shell脚本通过命名管道与C程序通信。假设C程序将在C头文件中定义的enum SAMPLE_ONE写入管道。shell脚本从管道中读取枚举值。有没有办法在C程序和shell脚本之间共享头文件?这样我只需更新头文件一次,而不必在shell脚本中写入相同的头常量?

请参见以下示例:

$cat foo.h
#定义枚举枚举
#定义逗号,
列举食物
{
FOO_值1=11逗号
FOO_VALUE2=22逗号
FOO_值3=33
};
要在C文件中使用:

$cat foo.c
#包括
#包括“foo.h”
#定义print_enum(x)printf(“%s=%d\n”,#x,x)
int main()
{
枚举foo_t foo=foo_值1;
打印枚举(FOO_值1);
打印枚举(FOO_值2);
打印枚举(FOO_值3);
返回0;
}
要在Shell脚本中使用:

$cat foo.sh
#!/bin/bash
shopt-s扩展_别名
别名ENUM='true'
别名逗号=
来源:foo.h
枚举名称=(${!FOO*})
用于${enum_names[@]}中的名称;做
echo$name=${!name}
完成
让我们测试一下:

$gcc foo.c
美元/年
FOO_值1=11
FOO_值2=22
FOO_值3=33
$bash foo.sh
FOO_值1=11
FOO_值2=22
FOO_值3=33
$

将配置数据写入单独的配置文件可能是更好的方法。 例如,您可以使用“Java属性”格式:

使用C进行解析应该不是很困难,而使用shell对其进行解析非常简单(source config.cfg)。您还可以从该文件生成带有#defines的头文件


我的观点是,如果您需要找到一种通用格式作为不同系统的源,那么您应该尝试使用最简单的格式。解析C预处理器指令肯定不是那么简单。虽然您可能会认为“#define PORT 1234”直接映射到属性格式中的“PORT=1234”,但您可以找到“*#define PORT BASE_PORT+1*”,它不容易用简单的脚本正确导出到shell

也许你想要的是有一个包含常数的文件,然后你可以在你的shell脚本和你的C程序中解析这个文件。我怀疑你可以利用一些可怕的黑客攻击,因为C将其视为预处理器指令,bash将其视为注释。XY问题的典型案例。
key=value
key2=value2