<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Раздел полезных советов: Шаблонизатор на shell</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html</link>
    <description>Часто для целей серверной автоматизации требуется генерация конфигурационных файлов.&lt;br&gt;&lt;br&gt;Предлагается использовать для этих целей следующую shell-конструкцию&lt;br&gt;&lt;br&gt;*BSD:&lt;br&gt;&lt;br&gt;   #!/bin/sh&lt;br&gt;   template_file=&apos;mytemplate&apos;&lt;br&gt;   myvar1=&apos;variable 1&apos;&lt;br&gt;   template=&#096;cat $&#123;template_file&#125;&#096;&lt;br&gt;   eval &quot;echo &#092;&quot;$&#123;template&#125;&#092;&quot;&quot; &amp;gt; $&#123;config_file&#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;Linux:&lt;br&gt;&lt;br&gt;   #!/bin/bash&lt;br&gt;   template_file=&apos;mytemplate&apos;&lt;br&gt;   myvar1=&apos;variable 1&apos;&lt;br&gt;   template=&#096;cat $&#123;template_file&#125;&#096;&lt;br&gt;   eval &quot;echo &#092;&quot;$&#123;template&#125;&#092;&quot;&quot; &amp;gt; $&#123;config_file&#125;&lt;br&gt;&lt;br&gt;Переменная template_file содержит путь к шаблону, остальные переменные - данные для шаблона. &lt;br&gt;Последная строчка - ничто иное, как &quot;движок&quot; шаблонизатора, eval-вычисление строки-шаблона.&lt;br&gt;&lt;br&gt;Пример шаблона:&lt;br&gt;&lt;br&gt;   myvar = $&#123;myvar1&#125;&lt;br&gt;   this is a &#092;&quot; quotes test &#092;&quot;&lt;br&gt;   $(&lt;br&gt;    if &#091; ! -z $&#123;myvar2&#125; &#093;; then&lt;br&gt;     echo &quot;myvar2 is set and its value = $&#123;myvar2&#125;&quot;&lt;br&gt;    fi&lt;br&gt;   )&lt;br&gt;   &lt;br&gt;Важно отметить, что в шаблоне следует экранировать кавычки.&lt;br&gt;В шаблоне можно использовать не только подстановки значений, но и управляющие конструкции, &lt;br&gt;</description>

<item>
    <title>Шаблонизатор на shell (osintsev)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html#12</link>
    <pubDate>Tue, 19 May 2009 10:41:21 GMT</pubDate>
    <description>&amp;gt; *BSD:&lt;br&gt;&amp;gt;   #!/bin/sh&lt;br&gt;&amp;gt;  ...&lt;br&gt;&amp;gt; Linux:&lt;br&gt;&amp;gt;   #!/bin/bash&lt;br&gt;&amp;gt;  ...&lt;br&gt;&lt;br&gt;феерично...&lt;br&gt;</description>
</item>

<item>
    <title>Шаблонизатор на shell (keeper)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html#11</link>
    <pubDate>Mon, 18 May 2009 07:48:40 GMT</pubDate>
    <description>Вариация на тему Smarty. Транслятор шаблонов преобразует шаблон вида (см. ниже) в исполняемый шелл-скрипт:&lt;br&gt;./template.sh &amp;lt;virthost.tpl &amp;gt;virthost.tpl.sh&lt;br&gt;&lt;br&gt;&lt;br&gt;Транслятор шаблонов:&lt;br&gt;&lt;br&gt;#!/bin/sh&lt;br&gt;&lt;br&gt;# $SUBSTITUTION&lt;br&gt;# &amp;lt;if $EXPR&amp;gt; ... &amp;lt;else&amp;gt; ... &amp;lt;/if&amp;gt;&lt;br&gt;# &amp;lt;for ITEM in $LIST&amp;gt; ... &amp;lt;/for&amp;gt;&lt;br&gt;&lt;br&gt;cat &amp;#124; sed -E -e &apos;s/&#092;&#092;/&#092;&#092;&#092;&#092;&#092;&#092;&#092;&#092;/g&apos; -e &apos;s/&quot;/&#092;&#092;&quot;/g&apos; -e &apos;s/&#037;/&#037;&#037;/g&apos; &#092;&lt;br&gt;-e &apos;s/^(.*)$/printf &quot;&#092;1&#092;&#092;n&quot;/&apos; &amp;#124; &#092;&lt;br&gt;sed -E -e &apos;s/&amp;lt;if (&#091;^&amp;gt;&#093;*)&amp;gt;/&quot;; if &#091; &#092;1 &#093;; then printf &quot;/&apos; &#092;&lt;br&gt;-e &apos;s/&amp;lt;else&amp;gt;/&quot;; else printf &quot;/&apos; &#092;&lt;br&gt;-e &apos;s/&amp;lt;&#092;/if&amp;gt;/&quot;; fi; printf &quot;/&apos; &#092;&lt;br&gt;-e &apos;s/&amp;lt;for (&#091;^&amp;gt;&#093;+)&amp;gt;/&quot;; for &#092;1; do printf &quot;/&apos; &#092;&lt;br&gt;-e &apos;s/&amp;lt;&#092;/for&amp;gt;/&quot;; done; printf &quot;/&apos;&lt;br&gt;&lt;br&gt;&lt;br&gt;Исходный шаблон:&lt;br&gt;&lt;br&gt;&amp;lt;VirtualHost $IP:$PORT&amp;gt;&lt;br&gt;ServerName  $SITENAME&lt;br&gt;&amp;lt;if $&#123;#ALIAS_LIST&#125; -ne 0&amp;gt;&lt;br&gt;ServerAlias $ALIAS_LIST&lt;br&gt;&amp;lt;/if&amp;gt;&lt;br&gt;ServerAdmin webmaster&#064;$SITENAME&lt;br&gt;DocumentRoot /home/$USERNAME/www&lt;br&gt;CustomLog /home/$USERNAME/log/access.log combined&lt;br&gt;ErrorLog  /home/$USERNAME/log/error.log&lt;br&gt;&amp;lt;Directory &quot;/home/$USERNAME/www&quot;&amp;gt;&lt;br&gt;AllowOverride AuthConfig FileInfo Options Indexes Limit&lt;br&gt;Allow from all&lt;br&gt;&amp;lt;/Directo</description>
</item>

<item>
    <title>Раздел полезных советов: Шаблонизатор на shell (Andrey Mitrofanov)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html#10</link>
    <pubDate>Fri, 15 May 2009 06:47:17 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;Пример шаблона: &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;   myvar = $&#123;myvar1&#125; &lt;br&gt;&amp;gt;   this is a &#092;&quot; quotes test &#092;&quot; &lt;br&gt;&amp;gt;   $( &lt;br&gt;&amp;gt;    if &#091; ! -z $&#123;myvar2&#125; &#093;; then &lt;br&gt;&amp;gt;     echo &quot;myvar2 is set and its value &lt;br&gt;&amp;gt;= $&#123;myvar2&#125;&quot; &lt;br&gt;&amp;gt;    fi &lt;br&gt;&amp;gt;   ) &lt;br&gt;&lt;br&gt;---8&amp;lt;---&lt;br&gt;#!/bin/bash&lt;br&gt;config_file=&apos;test.conf&apos;&lt;br&gt;myvar1=&apos;variable 1&apos;&lt;br&gt;cat &amp;lt;&amp;lt;TPLT &amp;gt; $&#123;config_file&#125;&lt;br&gt;myvar = $&#123;myvar1&#125;&lt;br&gt;this is a &quot; quotes test &quot;&lt;br&gt;$(&lt;br&gt; if &#091; ! -z $&#123;myvar2&#125; &#093;; then&lt;br&gt;  echo &quot;myvar2 is set and its value = $&#123;myvar2&#125;&quot;&lt;br&gt; fi&lt;br&gt;)&lt;br&gt;TPLT&lt;br&gt;---&amp;gt;8---&lt;br&gt;&lt;br&gt;1. Одним файлом: шаблон как here-document в скрипте.&lt;br&gt;2. Кавычки не нужно экранировать. Нужно экранировать &apos;$&apos;, если на выходе нужен сам этот символ.&lt;br&gt;3. У неортодоксальных нерелигиозных нефанатиков, освоивших установку $чего-то-там-про-пакеты, bash бывает и _не_ на ОС GNU/Linux (впрочем, как и не на ядре linux). Впрочем, безусловно, такие исключения только подтверждают правило, ога.&lt;br&gt;</description>
</item>

<item>
    <title>Шаблон и затор на shell (Andrey Mitrofanov)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html#9</link>
    <pubDate>Fri, 15 May 2009 06:24:21 GMT</pubDate>
    <description>&amp;gt;я уже лет 5 на шелле рисую&lt;br&gt;&lt;br&gt;Попробуй читать чужие &quot;рисунки&quot;... &quot;./configure&quot;, &quot;make&quot; и проч. -- не-е-епонятнейшие &quot;головоломки&quot;. :&amp;gt;&lt;br&gt;&lt;br&gt;&amp;gt; но не понял идеи поста:) &lt;br&gt;&lt;br&gt;Моего? Одной из 6 других реплик? &amp;lt;&amp;lt;Полезного совета&amp;gt;&amp;gt;? Своего?? Раскажите об этом подробнее.&lt;br&gt;</description>
</item>

<item>
    <title>Шаблонизатор на shell (Аноним)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html#8</link>
    <pubDate>Thu, 14 May 2009 18:45:00 GMT</pubDate>
    <description>я уже лет 5 на шелле рисую. в последние два года много и часто, но не понял идеи поста:)&lt;br&gt;</description>
</item>

<item>
    <title>Шаблонизатор на shell (Andrey Mitrofanov)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html#7</link>
    <pubDate>Thu, 14 May 2009 09:05:15 GMT</pubDate>
    <description>&amp;gt;Не понял цели. &lt;br&gt;&amp;gt;Можно пример применения? &lt;br&gt;&lt;br&gt;Ну, это что-то типа того, что обычно делается другими средствами... Вроде&lt;br&gt;&lt;br&gt;sed &amp;lt;file.template &amp;gt;file.new &quot;s/&#064;&#064;VAR1&#064;&#064;/$VAR1/g; s/&#064;&#064;VAR2&#064;&#064;/$VAR2/g;&quot;&lt;br&gt;&lt;br&gt;или&lt;br&gt;&lt;br&gt;---8&amp;lt;--- /etc/init.d/bootmisc.sh, фрагмент&lt;br&gt;# Update motd&lt;br&gt;uname -snrvm &amp;gt; /var/run/motd&lt;br&gt;&#091; -f /etc/motd.tail &#093; &amp;&amp; cat /etc/motd.tail &amp;gt;&amp;gt; /var/run/motd&lt;br&gt;</description>
</item>

<item>
    <title>Шаблонизатор на shell (XoRe)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html#6</link>
    <pubDate>Thu, 14 May 2009 08:49:38 GMT</pubDate>
    <description>Не понял цели.&lt;br&gt;Можно пример применения?&lt;br&gt;</description>
</item>

<item>
    <title>Шаблонизатор на shell (Denis Nasyrtdinov)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html#5</link>
    <pubDate>Thu, 14 May 2009 07:40:14 GMT</pubDate>
    <description>Спасибо за правку моего текста. Не стоило так торопиться при наборе )&lt;br&gt;Скоро, если не поленюсь, отправлю еще пару наработок по FreeBSD&lt;br&gt;</description>
</item>

<item>
    <title>Шаблонизатор на shell (Maxim Chirkov)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID3/54304.html#4</link>
    <pubDate>Thu, 14 May 2009 07:01:47 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;проверяли... &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt; eval &quot;echo &#092;&quot;$&#123;template&#125;&#092;&quot;&quot; &amp;gt; $&#123;config_file&#125;&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;ambiguous redirect &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt; this is a &#092;&quot; quotes test &#092;&quot;&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Это что за команда... &lt;br&gt;&amp;gt;Макс удаляй нафиг, лажу копируют сюда!!! &lt;br&gt;&lt;br&gt;Это не команда, это текст из файла с темплейтом. отсутствие определения переменной config_file поправил. Очень полезный совет, побольше бы таких присылали.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
