Я написал этот тестовый скрипт:
#!/bin/bash
build_message='build'
# On first run, the supplied settings block is appended to the supplied config
# file surrounded by comments ("# build START" and "# build END").
# On subsequent runs, the lines in between the two comments will be replaced
# by the provided settings block.
config-insert () {
settings="$1"
file="$2"
awk='BEGIN { p = 1; o = 1; }
$0 ~ "^# " m " START" { p = 0; if (o) output(); o = 0; }
$0 ~ "^# " m " END"{ p = 1; next }
END { if (o) output(o); }
{ if (p) print $0; }
function output() { print "# " m " START\n" s "\n# " m " END"; }'
awk -v m="$build_message" -v s="$settings" $awk $file > $file
}
config-insert "setting block" testfile
Когда я запускаю его, я получаю странную ошибку:
авк: команд. строка: 1: блоки BEGIN должны иметь часть действия
awk
вот так?awk
неbash
и не соответствует расширениям, которые вы ожидаете в bash. Также обратите внимание, что вы перенаправляете вывод файла в тот же файл. - person jaypal singh   schedule 20.04.2014awk
переменной с именемawk
, а затем вызов этой переменной внутриawk
. - person jaypal singh   schedule 21.04.2014awk "awkscript" file
? - person mattalxndr   schedule 21.04.2014