1.1, pavlinux (ok), 01:39, 14/05/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Какую-то х...ню накопипастили, сами-то
проверяли...
> eval "echo \"${template}\"" > ${config_file}
ambiguous redirect
> this is a \" quotes test \"
Это что за команда...
Макс удаляй нафиг, лажу копируют сюда!!!
| |
|
2.2, Гость (?), 07:41, 14/05/2009 [^] [^^] [^^^] [ответить]
| +/– |
все работает на ура, единственно что переменную указать config_file='test.conf'
| |
2.4, Maxim Chirkov (ok), 11:01, 14/05/2009 [^] [^^] [^^^] [ответить]
| +/– |
>[оверквотинг удален]
>проверяли...
>
>> eval "echo \"${template}\"" > ${config_file}
>
>ambiguous redirect
>
>> this is a \" quotes test \"
>
>Это что за команда...
>Макс удаляй нафиг, лажу копируют сюда!!!
Это не команда, это текст из файла с темплейтом. отсутствие определения переменной config_file поправил. Очень полезный совет, побольше бы таких присылали.
| |
|
3.5, Denis Nasyrtdinov (?), 11:40, 14/05/2009 [^] [^^] [^^^] [ответить]
| +/– |
Спасибо за правку моего текста. Не стоило так торопиться при наборе )
Скоро, если не поленюсь, отправлю еще пару наработок по FreeBSD
| |
|
|
|
2.7, Andrey Mitrofanov (?), 13:05, 14/05/2009 [^] [^^] [^^^] [ответить]
| +/– |
>Не понял цели.
>Можно пример применения?
Ну, это что-то типа того, что обычно делается другими средствами... Вроде
sed <file.template >file.new "s/@@VAR1@@/$VAR1/g; s/@@VAR2@@/$VAR2/g;"
или
---8<--- /etc/init.d/bootmisc.sh, фрагмент
# Update motd
uname -snrvm > /var/run/motd
[ -f /etc/motd.tail ] && cat /etc/motd.tail >> /var/run/motd
| |
|
3.8, Аноним (-), 22:45, 14/05/2009 [^] [^^] [^^^] [ответить]
| +/– |
я уже лет 5 на шелле рисую. в последние два года много и часто, но не понял идеи поста:)
| |
|
4.9, Andrey Mitrofanov (?), 10:24, 15/05/2009 [^] [^^] [^^^] [ответить]
| +/– |
>я уже лет 5 на шелле рисую
Попробуй читать чужие "рисунки"... "./configure", "make" и проч. -- не-е-епонятнейшие "головоломки". :>
> но не понял идеи поста:)
Моего? Одной из 6 других реплик? <<Полезного совета>>? Своего?? Раскажите об этом подробнее.
| |
|
|
|
1.10, Andrey Mitrofanov (?), 10:47, 15/05/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
>[оверквотинг удален]
>Пример шаблона:
>
> myvar = ${myvar1}
> this is a \" quotes test \"
> $(
> if [ ! -z ${myvar2} ]; then
> echo "myvar2 is set and its value
>= ${myvar2}"
> fi
> )
---8<---
#!/bin/bash
config_file='test.conf'
myvar1='variable 1'
cat <<TPLT > ${config_file}
myvar = ${myvar1}
this is a " quotes test "
$(
if [ ! -z ${myvar2} ]; then
echo "myvar2 is set and its value = ${myvar2}"
fi
)
TPLT
--->8---
1. Одним файлом: шаблон как here-document в скрипте.
2. Кавычки не нужно экранировать. Нужно экранировать '$', если на выходе нужен сам этот символ.
3. У неортодоксальных нерелигиозных нефанатиков, освоивших установку $чего-то-там-про-пакеты, bash бывает и _не_ на ОС GNU/Linux (впрочем, как и не на ядре linux). Впрочем, безусловно, такие исключения только подтверждают правило, ога.
| |
1.11, keeper (ok), 11:48, 18/05/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Вариация на тему Smarty. Транслятор шаблонов преобразует шаблон вида (см. ниже) в исполняемый шелл-скрипт:
./template.sh <virthost.tpl >virthost.tpl.sh
Транслятор шаблонов:
#!/bin/sh
# $SUBSTITUTION
# <if $EXPR> ... <else> ... </if>
# <for ITEM in $LIST> ... </for>
cat | sed -E -e 's/\\/\\\\\\\\/g' -e 's/"/\\"/g' -e 's/%/%%/g' \
-e 's/^(.*)$/printf "\1\\n"/' | \
sed -E -e 's/<if ([^>]*)>/"; if [ \1 ]; then printf "/' \
-e 's/<else>/"; else printf "/' \
-e 's/<\/if>/"; fi; printf "/' \
-e 's/<for ([^>]+)>/"; for \1; do printf "/' \
-e 's/<\/for>/"; done; printf "/'
Исходный шаблон:
<VirtualHost $IP:$PORT>
ServerName $SITENAME
<if ${#ALIAS_LIST} -ne 0>
ServerAlias $ALIAS_LIST
</if>
ServerAdmin webmaster@$SITENAME
DocumentRoot /home/$USERNAME/www
CustomLog /home/$USERNAME/log/access.log combined
ErrorLog /home/$USERNAME/log/error.log
<Directory "/home/$USERNAME/www">
AllowOverride AuthConfig FileInfo Options Indexes Limit
Allow from all
</Directory>
php_admin_value open_basedir /home/$USERNAME:/var/tmp
php_admin_value upload_tmp_dir /home/$USERNAME/tmp
php_admin_value session.save_path /home/$USERNAME/tmp
php_admin_value error_log /home/$USERNAME/log/php.log
php_value include_path .:/home/$USERNAME/www/:
<if $USE_SSL = yes>
SSLEngine on
SSLCertificateFile /home/$USERNAME/keys/$SITENAME.crt
SSLCertificateKeyFile /home/$USERNAME/keys/$SITENAME.key
</if>
</VirtualHost>
Затем оттранслированный шаблон используется примерно так:
IP="*"
PORT="80"
USERNAME=$ARG_USERNAME
SITENAME=$ARG_SITENAME
ALIAS_LIST="www.$ARG_SITENAME $ARG_ALIAS_LIST"
USE_SSL="no"
. virthost.tpl.sh >$CONF
А ты написал шаблонизатор на шелле? ^_^
| |
|