我想为部署创建自动化,js / css是使用前缀生成的,我想将它们导入到标记之间的php文件中
预期输出
...
/*bashStart*/
drupal_add_css(drupal_get_path("module","myModule")."/styles/c91c6d11.main.css");
drupal_add_js(drupal_get_path("module","myModule")."/scripts/j91c6d11.main.js");
/*bashEnd*/
...
到目前为止,我使用了awk并把我带到了这里,但我遇到了问题,它已经生成了
...
/*bashStart*/
drupal_add_css(drupal_get_path("module","myModule")."/styles/c91c6d11.main.css
");
drupal_add_js(drupal_get_path("module","myModule")."/scripts/j91c6d11.main.js
");
/*bashEnd*/
...
这是awk脚本:
awk 'BEGIN {p=1}/Start/{print;printf("drupal_add_css(drupal_get_path(\"module\",\"myModule\").\"/styles/");system("ls styles");printf("\");\n");printf("drupal_add_js(drupal_get_path(\"module\",\"myModule\").\"/scripts/");system("ls scripts");printf("\");\n");p=0}/Finish/{p=1} p' myModule.module > tmp;
答案 0 :(得分:1)
在awk中使用ls不是很好 - 我认为你可以完全在shell中执行此操作:
#!/bin/bash
p=1
while read -r line; do
[[ $line = '/*bashEnd*/' ]] && p=1
(( p )) && echo "$line"
if [[ $line = '/*bashStart*/' ]]; then
p=0
for style in styles/*; do
echo 'drupal_add_css(drupal_get_path("module","myModule")."/styles/'"$style"'");'
done
for script in scripts/*; do
echo 'drupal_add_js(drupal_get_path("module","myModule")."/scripts/'"$script"'");'
done
fi
done < file.php > output.php
循环输入文件,直到到达“bashStart”行,然后添加所需的行。输出转到文件output.php
,您可以在覆盖原始文件之前检查该文件。如果您有信心可以将&& mv output.php file.php
添加到done
行,则覆盖原始文件。
标志p
控制打印哪条线。当达到“bashStart”行时设置为0,当达到bashEnd行时设置为1,因此两者之间的行被替换。