Вы могли использовать несколько 'регионов' в screen
:
$ cat screenrc.sql
escape ^aa # adjust as needed
bind q quit # to quickly exit
screen 0 less ${FILE}
screen 1 less ${FILE}
split # create two regions
focus top # starting with the top region
resize 4 # make it four lines (one for screen line, one for less prompt)
select 0 # display window 0
focus bottom # in the bottom region
select 1 # display window 1 and focus here
Затем просто необходимо установить переменную среды $FILE:
$ FILE=$HOME/.bash_profile screen -mc screenrc.sql
Вы могли сделать что-то как:
eval "cat << __end_of_template__
$(sed 's/[\$`]/\\&/g;s/<%= @\([^ ]*\) %>/${\1}/g' < template)
__end_of_template__"
Таким образом, имейте замену sed весь <%= @xxx %>
с ${xxx}
выйдя весь $
, \
и `
символы и позволяют оболочке сделать расширение.
Или если Вы не можете гарантировать это template
не будет содержать a __end_of_template__
строка:
eval "cut -c2- << x
$(sed 's/[\$`]/\\&/g;s/<%= @\([^ ]*\) %>/${\1}/g;s/^/y/' < template)
x"
awk
путь:
awk -F= 'FNR==NR{v[$1]=$2;next};{for(p in v)gsub("<%= @"p" %>",v[p])};1' config template
Обновленный согласно комментарию Stephane Chazelas для разрешения “=” входит в систему значения:
awk -F= 'FNR==NR{v[$1]=substr($0,length($1)+2);next};{for(p in v)gsub("<%= @"p" %>",v[p])};1' config template
FOO="<%= @BAR %>"
)
– Stéphane Chazelas
06.12.2012, 15:33
Односторонняя дорога:
#!/bin/sh
. config
while read line
do
eval echo $(echo $line | sed "s/\([^<]*\)<%= @\([^ ]*\) %>/\1 \$\2/")
done < template
Результаты:
The host is localhost
The port is 8080
Используя sed
, мы извлекаем символы до' <' и формируем группу (\1
), и извлечение заполнитель и форма другая группа (\2
). Этим заменяют с 1-й группой и затем долларовым символом, сопровождаемым 2-й группой. Только при помощи eval
команда, переменная может быть оценена и расширена.
Вы можете использовать mustache(1) для замены кучи переменных шаблона:
$ { echo ---; sed 's/=/: /' config; echo --- } \
| mustache - <(sed -e 's/<%= @/{{/g' -e 's/%>/}}/g' template)
Первый элемент трубы переводит ваши конфигурационные назначения в синтаксис YAML, который понимает мой mustache. Вторая команда sed
заменяет ссылки на переменные стиля <%= @VAR %>
на переменные mustache {{ VAR }}
.
На Fedora, mustache
является частью пакета rubygem-mustache
.
В качестве альтернативы вы можете использовать envsubst
(предоставляется пакетом gettext
), например:
$ ( export $(cat config) ; sed -e 's/<%= @\([^%]*\) %>/${\1}/g' template
| envsubst )
Требуется, чтобы ваши назначения переменных были действительны и в оболочке.