我最近一直在使用命令行中的erb.我想制作一个简单的简单erb模板,例如以下内容:
<%- name = "Joe"; quality = "fantastic" -%>
Hello. My name is <%= name %>. I hope your day is <%= quality %>.
Run Code Online (Sandbox Code Playgroud)
如果我跑,这是有效的
erb -T - thatfile.erb
Run Code Online (Sandbox Code Playgroud)
我想做的是从命令行参数中创建name并quality通过,这样我就可以执行以下操作:
./thatfile.erb "Bill" "super"
Run Code Online (Sandbox Code Playgroud)
从bash提示符做同样的事情.
我知道我可以编写一个ruby脚本,只读取该模板然后使用ERB.new(File.read("thatfile.erb")).result(binding),或者在END执行之后编写模板,但我正在寻找一种更轻量级的方法,如果它存在,因为我不我想为我为此创建的每个erb脚本编写两个文件.
我编写了这个微不足道的小程序来演示我的问题(标题为hello.c)(旁注:我注意到此程序中存在内存泄漏,但这只是一个示例,因此并不重要):
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv) {
char * buf = NULL;
size_t buflen = 0;
ssize_t line_len;
while ((line_len = getline(&buf, &buflen, stdin)) > 0) {
buf[line_len - 1] = '\0';
char * val = getenv(buf);
if (val) {
printf("setenv %s \"%s\"\n", buf, val);
}
else {
fprintf(stderr, "warning: %s not found\n", buf);
}
}
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
这在 Linux 下编译得很好,使用带有以下 makefile 的 gcc 和 gnu make:
CFLAGS += -std=c11 …Run Code Online (Sandbox Code Playgroud)