<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Shell on Ulis Notizen</title>
    <link>https://wolf-u.li/tag/shell/</link>
    <description>Recent content in Shell on Ulis Notizen</description>
    <generator>Hugo -- 0.155.3</generator>
    <language>de</language>
    <copyright>Copyright 2006-CURRENTYEAR Uli Wolf - All rights reserved</copyright>
    <lastBuildDate>Sat, 11 Jun 2016 08:45:20 +1100</lastBuildDate>
    <atom:link href="https://wolf-u.li/tag/shell/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>bash Quellcode Dokumentation mittels Doxygen</title>
      
      
      <link>https://wolf-u.li/bash-quellcode-dokumentation-mittels-doxygen/</link>
      <pubDate>Sat, 11 Jun 2016 08:45:20 +1100</pubDate>
      <guid>https://wolf-u.li/bash-quellcode-dokumentation-mittels-doxygen/</guid>
      <description>&lt;p&gt;Vor einiger Zeit hatte ich mich mal aufgemacht um meine Bash-Dateien, welche ich täglich verwende mal sauber zu dokumentieren. Dabei habe ich verschiedene Lösungen ausprobiert (von selbstgebauten bis zu kostenpflichtigen) und bin letztendlich bei &lt;link rel=dns-prefetch href=//www.doxygen.org /&gt; &lt;a href=&#34;http://www.doxygen.org/&#34;
    title=&#34;Doxygen&#34; 
     target=&#34;_blank&#34; rel=&#34;nofollow noopener noreferrer&#34; &gt;
  Doxygen&amp;nbsp;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;icon&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34; viewBox=&#34;0 -128 512 640&#34;&gt;
    &lt;path d=&#34;M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z&#34;/&gt;
  &lt;/svg&gt;&lt;/a&gt; hängen geblieben. Doygen kann jedoch von Haus aus nicht mit bash Dateien umgehen. In diesem Beitrag zeige ich wie man das löst und Doxygen dafür vorbereitet.&lt;/p&gt;</description>
      
         <content:encoded><![CDATA[<p>Vor einiger Zeit hatte ich mich mal aufgemacht um meine Bash-Dateien, welche ich täglich verwende mal sauber zu dokumentieren. Dabei habe ich verschiedene Lösungen ausprobiert (von selbstgebauten bis zu kostenpflichtigen) und bin letztendlich bei <link rel=dns-prefetch href=//www.doxygen.org /> <a href="http://www.doxygen.org/"
    title="Doxygen" 
     target="_blank" rel="nofollow noopener noreferrer" >
  Doxygen&nbsp;<svg xmlns="http://www.w3.org/2000/svg" class="icon" aria-hidden="true" focusable="false" viewBox="0 -128 512 640">
    <path d="M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z"/>
  </svg></a> hängen geblieben. Doygen kann jedoch von Haus aus nicht mit bash Dateien umgehen. In diesem Beitrag zeige ich wie man das löst und Doxygen dafür vorbereitet.</p>
<p>Los geht es mit der Installation von Doxygen welche je nach Distro unterschiedlich ist. Ich bin mit der manuellen Kompilierung ganz gut gefahren, aber das kommt auf den Nutzer an ;) So habe ich zunächst <link rel=dns-prefetch href=//www.stack.nl /> <a href="http://www.stack.nl/~dimitri/doxygen/download.html#gitrepos#gitrepos"
    title="hier" 
     target="_blank" rel="nofollow noopener noreferrer" >
  hier&nbsp;<svg xmlns="http://www.w3.org/2000/svg" class="icon" aria-hidden="true" focusable="false" viewBox="0 -128 512 640">
    <path d="M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z"/>
  </svg></a> die Anweisungen für die &ldquo;Bleeding Edge&rdquo; Version nachgesehen und durchgeführt.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/doxygen/doxygen.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> doxygen
</span></span><span class="line"><span class="cl">mkdir build
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> build
</span></span><span class="line"><span class="cl">cmake -G <span class="s2">&#34;Unix Makefiles&#34;</span> ..
</span></span><span class="line"><span class="cl">make
</span></span><span class="line"><span class="cl">make install
</span></span></code></pre></td></tr></table>
</div>
</div><p>An dieser Stelle sollte sich unter:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">doxygen -v
</span></span></code></pre></td></tr></table>
</div>
</div><p>schon das binary melden können ;)</p>
<p>Nun geht es an die Einbindung des Bash Dokumentationsplugins. Dazu verwende ich <link rel=dns-prefetch href=//github.com /> <a href="https://github.com/Anvil/bash-doxygen/"
    title="bash-doxygen" 
     target="_blank" rel="nofollow noopener noreferrer" >
  bash-doxygen&nbsp;<svg xmlns="http://www.w3.org/2000/svg" class="icon" aria-hidden="true" focusable="false" viewBox="0 -128 512 640">
    <path d="M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z"/>
  </svg></a> was ein Filter, in sed umgesetzt, ist und die Dateien von Bash auf C-Code (was doxygen versteht) umsetzt.</p>
<p>Zunächst muss man sich einen Ort raussuchen unter dem das Plugin zu finden ist. Der Author selbst hat das Plugin unter die <link rel=dns-prefetch href=//www.wtfpl.net /> <a href="http://www.wtfpl.net/"
    title="WTFPL" 
     target="_blank" rel="nofollow noopener noreferrer" >
  WTFPL&nbsp;<svg xmlns="http://www.w3.org/2000/svg" class="icon" aria-hidden="true" focusable="false" viewBox="0 -128 512 640">
    <path d="M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z"/>
  </svg></a> gestellt, wodurch es auch direkt im Sourcecode mitgeliefert werden kann. Ich habe das bei meinem Projekt so gelöst, dass ich den Filter in einem Unterordner gehalten habe. Um das einfach darzustellen zeige ich mal wie mein Projekt aufgebaut ist.</p>
<p>Zunächst habe ich ein Verzeichnis in dem eine bash-Datei liegt, die dokumentiert werden soll. Das ganze sieht dann so aus:</p>
<ul>
<li><em>myfile.sh</em>
<ul>
<li><strong>docs</strong>
<ul>
<li><em>generate.sh</em></li>
<li><strong>helpers</strong>
<ul>
<li><strong>bash-doxygen</strong>
<ul>
<li><em>doxygen-bash.sed</em></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Oder als Kommandos:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">LOCALDIR</span><span class="o">=</span><span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>
</span></span><span class="line"><span class="cl">mkdir -p <span class="nv">$LOCALDIR</span>/docs/helpers
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="nv">$LOCALDIR</span>/docs/helpers
</span></span><span class="line"><span class="cl">git clone https://github.com/Anvil/bash-doxygen.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="nv">$LOCALDIR</span>/docs
</span></span><span class="line"><span class="cl">wget https://wolf-u.li/upload/2016/06/5657-generate.txt -O generate.sh
</span></span><span class="line"><span class="cl">doxygen -g
</span></span><span class="line"><span class="cl">chmod +x generate.sh
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="nv">$LOCALDIR</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Nun steht die Struktur aber man muss noch das Konfigurationsfile für Doxygen unter <em>docs/Doxyfile</em> anpassen. Dazu editiert man dieses - im Nachfolgenden gebe ich die wichtigsten Änderungen an, welche ich durchgeführt habe:</p>
<ul>
<li>
<p>PROJECT_NAME
Hier habe ich den Namen meines Projektes eingetragen - dieser erscheint dann in der Titelzeile der Dokumentation.</p>
</li>
<li>
<p>PROJECT_NUMBER</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">PROJECT_NUMBER</span> <span class="o">=</span> <span class="k">$(</span>PROJECT_NUMBER<span class="k">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Diese Projektnummer wird via Umgebungsvariable in der <em>generate.sh</em> gesetzt und kann beispielsweise ein git commit oder das aktuelle Datum sein.</p>
</li>
<li>
<p>PROJECT_BRIEF
Ein schlagkräftiger Satz zur Beschreibung. Wird im Header der Dokumentation angezeigt.</p>
</li>
<li>
<p>EXTENSION_MAPPING</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">EXTENSION_MAPPING</span> <span class="o">=</span> <span class="nv">sh</span><span class="o">=</span>C
</span></span></code></pre></td></tr></table>
</div>
</div><p>um die sh Dateien parsen zu lassen</p>
</li>
<li>
<p>INPUT</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">INPUT</span> <span class="o">=</span> ../
</span></span></code></pre></td></tr></table>
</div>
</div><p>da der übergeordnete Ordner geparsed werden soll</p>
</li>
<li>
<p>FILE_PATTERNS
Füge das Pattern</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">*.sh
</span></span></code></pre></td></tr></table>
</div>
</div><p>mit hinzu, damit Doxygen diese Files ansieht</p>
</li>
<li>
<p>RECURSIVE</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">RECURSIVE</span> <span class="o">=</span> YES
</span></span></code></pre></td></tr></table>
</div>
</div><p>da auch untergeordnete Ordner geparsed werden sollen</p>
</li>
<li>
<p>EXCLUDE_PATTERNS</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">EXCLUDE_PATTERNS</span> <span class="o">=</span> */docs/*
</span></span></code></pre></td></tr></table>
</div>
</div><p>Alle Ordner, die &ldquo;docs&rdquo; im Namen beinhalten sollen nicht geparsed werden</p>
</li>
<li>
<p>INPUT_FILTER</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">INPUT_FILTER</span> <span class="o">=</span> <span class="s2">&#34;sed -n -f helpers/bash-doxygen/doxygen-bash.sed -- &#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
</ul>
<p>Damit fehlt dann nur noch das myfile.sh. Hier ein Quickstarter als Template für bashfiles:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span><span class="lnt">62
</span><span class="lnt">63
</span><span class="lnt">64
</span><span class="lnt">65
</span><span class="lnt">66
</span><span class="lnt">67
</span><span class="lnt">68
</span><span class="lnt">69
</span><span class="lnt">70
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/sh
</span></span></span><span class="line"><span class="cl"><span class="c1">## @file myfile.sh</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @brief Runs the cooles things in the world.</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @author Uli Wolf</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @date 2016-06-08</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @copyright Released under the WTFPL</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @details This script provides the required code to run code that is cooler than anybody elses code</span>
</span></span><span class="line"><span class="cl"><span class="c1">#######################################################################################################################</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @mainpage MyFile Docs</span>
</span></span><span class="line"><span class="cl"><span class="c1">## This line shows a quick overview of what the Project does</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @tableofcontents</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @section secoverview Overview</span>
</span></span><span class="line"><span class="cl"><span class="c1">## Now this section shows really the details.</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @section secprerequisites Prerequisites</span>
</span></span><span class="line"><span class="cl"><span class="c1">## This describes the minimum requirements to run this script</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @subsection subsecdatabase Prerequisites: Database</span>
</span></span><span class="line"><span class="cl"><span class="c1">## * No database is required currently</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @subsection subsecagentversions Prerequisites: Minimum Version of the Agents</span>
</span></span><span class="line"><span class="cl"><span class="c1">## The minimum level of the respective are:</span>
</span></span><span class="line"><span class="cl"><span class="c1">## * What Agents?</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @section secintro Installation</span>
</span></span><span class="line"><span class="cl"><span class="c1">## Here you could show how to install the script</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @section secexecution Execution</span>
</span></span><span class="line"><span class="cl"><span class="c1">## The script is executed like this. The usage of the user root is forbidden.</span>
</span></span><span class="line"><span class="cl"><span class="c1">## ```{.sh}</span>
</span></span><span class="line"><span class="cl"><span class="c1">## myfile.sh</span>
</span></span><span class="line"><span class="cl"><span class="c1">## ```</span>
</span></span><span class="line"><span class="cl"><span class="c1">#######################################################################################################################</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Various Variable definitions</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @var V_INTERNALSTARTTIME</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @brief This holds the starttime</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @showinitializer</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @details Time is measured in seconds since 1st. of January 1970. The value will be used to later calculate the</span>
</span></span><span class="line"><span class="cl"><span class="c1">## runtime of the script.</span>
</span></span><span class="line"><span class="cl"><span class="nb">declare</span> <span class="nv">V_INTERNALSTARTTIME</span><span class="o">=</span><span class="k">$(</span>date +%s<span class="k">)</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## @var V_CURRENTTIMESTAMP</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @brief This holds the date in YYMMDD-HHMMSS format</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @showinitializer</span>
</span></span><span class="line"><span class="cl"><span class="nb">declare</span> <span class="nv">V_CURRENTTIMESTAMP</span><span class="o">=</span><span class="k">$(</span>date +%y%m%d-%H%M%S<span class="k">)</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## @var V_HOSTNAME</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @brief This holds the hostname of the local system</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @showinitializer</span>
</span></span><span class="line"><span class="cl"><span class="nb">declare</span> <span class="nv">V_HOSTNAME</span><span class="o">=</span><span class="k">$(</span>hostname -s<span class="k">)</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## @var D_SCRIPT</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @brief The local directory of the script</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @showinitializer</span>
</span></span><span class="line"><span class="cl"><span class="nb">declare</span> -x <span class="nv">D_SCRIPT</span><span class="o">=</span><span class="k">$(</span><span class="nb">cd</span> <span class="k">$(</span>dirname <span class="nv">$0</span><span class="k">)</span> <span class="o">&amp;&amp;</span> <span class="nb">pwd</span><span class="k">)</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="nb">export</span> D_SCRIPT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## @fn func_check_user_root()</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @author Uli Wolf The Second</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @brief Check User root</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @retval 0 if the user is root</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @retval 1 if the user is not root</span>
</span></span><span class="line"><span class="cl"><span class="c1">## @details Checks if the current user is root</span>
</span></span><span class="line"><span class="cl">func_check_user_root<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl"> <span class="nb">local</span> <span class="nv">CURRENTUSER</span><span class="o">=</span><span class="sb">`</span>whoami<span class="sb">`</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="o">[[</span> <span class="nv">$CURRENTUSER</span> !<span class="o">=</span> <span class="s2">&#34;root&#34;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> 1<span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">else</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> 0<span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">fi</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> <span class="k">$(</span>func_check_user_root<span class="k">)</span> <span class="o">==</span> <span class="m">1</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl"> <span class="nb">echo</span> <span class="s2">&#34;You are really not using root - awesome!&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Wie man sehen (<link rel=dns-prefetch href=//github.com /> <a href="https://github.com/Anvil/bash-doxygen/blob/master/README.md"
    title="und der Doku entnehmen kann" 
     target="_blank" rel="nofollow noopener noreferrer" >
  und der Doku entnehmen kann&nbsp;<svg xmlns="http://www.w3.org/2000/svg" class="icon" aria-hidden="true" focusable="false" viewBox="0 -128 512 640">
    <path d="M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z"/>
  </svg></a>) müssen die Teile, welche an Doxygen weitergegeben werden, mit zwei Rauten versehen werden. Zudem werden Variablen mit &ldquo;<link rel=dns-prefetch href=//www.tldp.org /> <a href="http://www.tldp.org/LDP/abs/html/declareref.html"
    title="declare" 
     target="_blank" rel="nofollow noopener noreferrer" >
  declare&nbsp;<svg xmlns="http://www.w3.org/2000/svg" class="icon" aria-hidden="true" focusable="false" viewBox="0 -128 512 640">
    <path d="M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z"/>
  </svg></a>&rdquo; versehen und Funktionen müssen ohne &ldquo;function&rdquo; keyword und mit der öffnenden Klammer in der ersten Zeile geschrieben und mit @fn versehen versehen werden. Die Hauptdatei kann man zusätzlich mit einer Beschreibung des Projekts (@mainpage) versehen werden. Dokumentation kann dann entweder regulär oder mit <link rel=dns-prefetch href=//www.stack.nl /> <a href="http://www.stack.nl/~dimitri/doxygen/manual/markdown.html"
    title="Markdown" 
     target="_blank" rel="nofollow noopener noreferrer" >
  Markdown&nbsp;<svg xmlns="http://www.w3.org/2000/svg" class="icon" aria-hidden="true" focusable="false" viewBox="0 -128 512 640">
    <path d="M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z"/>
  </svg></a> geschrieben werden. Und statt &ldquo;@&rdquo; kann man auch &ldquo;&quot; als keyword verwenden. Alle <link rel=dns-prefetch href=//www.stack.nl /> <a href="http://www.stack.nl/~dimitri/doxygen/manual/commands.html"
    title="keywords sind hier" 
     target="_blank" rel="nofollow noopener noreferrer" >
  keywords sind hier&nbsp;<svg xmlns="http://www.w3.org/2000/svg" class="icon" aria-hidden="true" focusable="false" viewBox="0 -128 512 640">
    <path d="M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z"/>
  </svg></a> beschrieben.</p>
<p>Eigentlich easy ;)</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
