<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Qbi's Weblog - zsh</title>
    <link>http://kubieziel.de/blog/</link>
    <description>Gedanken über mich, die Welt und alles andere</description>
    <dc:language>en</dc:language>
    <admin:errorReportsTo rdf:resource="mailto:qbi@kubieziel.de" />
    <generator>Serendipity 1.7-alpha1 - http://www.s9y.org/</generator>
    
    <image>
        <url>http://kubieziel.de/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Qbi's Weblog - zsh - Gedanken über mich, die Welt und alles andere</title>
        <link>http://kubieziel.de/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Fingerprints von SSL-Seiten prüfen</title>
    <link>http://kubieziel.de/blog/archives/1484-Fingerprints-von-SSL-Seiten-pruefen.html</link>
            <category>Krypto</category>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1484-Fingerprints-von-SSL-Seiten-pruefen.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1484</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1484</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Das &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=4195&amp;amp;entry_id=1484&quot;  onmouseover=&quot;window.status=&#039;http://www.heise.de/security/meldung/DigiNotar-Hack-Kritische-Infrastruktur-war-unzureichend-geschuetzt-1337378.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;Heisec zum DigiNotar-Hack&quot;&gt;Desaster um die niederländische Zertifizierungsstelle DigiNotar&lt;/a&gt;&amp;#160;zieht derzeit immer noch seine Kreise. Mir scheint es noch zu früh, um hier etwas dazu zu schreiben. Vielmehr will ich ein paar Worte verlieren, wie ich „meine eigene CA betreibe“. Denn schon seit längerem vertraue ich nicht, den von den Browsern mitgelieferten Zertifizierungsstellen (CA). Zumeist lösche ich alle und gebe dann einzeln Vertrauen.&lt;/p&gt; 
&lt;p&gt;Der beste Weg, um einem SSL-Zertifikat zu vertrauen, wäre, sich bei dem Betreiber zu melden und über einen sicheren Kanal den Fingerprint des Zertifikats zu klären. Mein Browser zeigt mit für die Seite &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=4196&amp;amp;entry_id=1484&quot; title=&quot;https://secure.wikimedia.org/wikipedia/de/wiki/Wikipedia:Hauptseite&quot;  onmouseover=&quot;window.status=&#039;https://secure.wikimedia.org/wikipedia/de/wiki/Wikipedia:Hauptseite&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Wikipedia-SSL-Seite&lt;/a&gt;&amp;#160;den Fingerprint (SHA-1) &lt;samp&gt;BA:8A:BE:34:B1:34:3B:AF:06:05:4B:48:A9:27:AA:D9:B4:75:45:6E&lt;/samp&gt; an. Wenn ich bei der Wikipedia anrufe und diese mir denselben nennen, so habe ich das korrekte Zertifikat. Dabei nehme ich natürlich an, dass das Telefon ein sicherer Weg zum Austausch der Informationen ist. Aber beispielsweise druckt die lokale Sparkasse eben diesen Fingerprint auf ihre Dokumente. Damit kann ich das als Kunde leicht verifizieren.&lt;/p&gt; 
&lt;p&gt;Wie das Beispiel Wikipedia aber schon zeigt, ergibt sich da ein Problem.Woher bekomme ich den Fingerprint? Muss ich bei Jimmy Wales direkt anrufen oder gar nach &lt;del&gt;Florida&lt;/del&gt;&lt;ins&gt;Kalifornien&lt;/ins&gt;&lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=4198&amp;amp;entry_id=1484&quot; title=&quot;https://plus.google.com/115844971100496683214/posts/agWzBznSipp&quot;  onmouseover=&quot;window.status=&#039;https://plus.google.com/115844971100496683214/posts/agWzBznSipp&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;¹&lt;/a&gt;  reisen? Hier kam nun meine Idee ins Spiel.&lt;/p&gt; 
&lt;p&gt;Ich habe auf diversen Servern einen Zugang, d.h. ich kann mich von der Ferne einloggen und dann dort arbeiten. Die Rechner stehen in verschiedenen Netzen und zum Teil auf verschiedenen Kontinenten. Nun logge ich mich auf den Servern ein, lade das Zertifikat herunter und lasse mir den Fingerprint anzeigen. Wenn dieser auf allen Rechner gleich ist, dann gehe ich davon aus, dass ich das korrekte Zertifikat angezeigt bekomme. In dem Fall akzeptiere ich das und vertraue dem. Sollten die Fingerprints abweichen, dann akzeptiere ich das nicht und recherchiere dem in der Regel ein wenig hinterher.&lt;/p&gt; 
&lt;p&gt;Jörg Sommer hat das nun ein wenig automatisiert und ein &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=4197&amp;amp;entry_id=1484&quot; title=&quot;http://svn.lug-jena.de/tools/ssl-fp-check?revision=HEAD&quot;  onmouseover=&quot;window.status=&#039;http://svn.lug-jena.de/tools/ssl-fp-check?revision=HEAD&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Skript&lt;/a&gt; geschrieben. Das wird folgendermaßen aufgerufen:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ssl-fp-check [-l] sslsi.te[:port] ssh1 [ssh2] [ssh3] ...&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Dabei ist &lt;code&gt;sslsi.te&lt;/code&gt; die Webseite, die geprüft werden soll. Ohne die Angabe eines Ports verwendet das Skript standardmäßig 443. Danach wird eine oder mehrere SSH-Verbindungen angegeben. Das Skript wird nun versuchen, sich überall einzuloggen und gibt dann den Fingerprint aus. Für den Fall, dass es auf dem Zielsystem kein OpenSSL gibt, existiert die Option &lt;code&gt;-l&lt;/code&gt;. Dabei wird dann ein Tunnel gebaut und das lokale installierte OpenSSL verwendet.&lt;/p&gt; 
&lt;p&gt;Also für Wikimedia habe ich folgendes eingeben:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ssl-fp-check secure.wikimedia.org a b c d&lt;/code&gt;
&lt;samp&gt;a: SHA1 Fingerprint=BA:8A:BE:34:B1:34:3B:AF:06:05:4B:48:A9:27:AA:D9:B4:75:45:6E
b: SHA1 Fingerprint=BA:8A:BE:34:B1:34:3B:AF:06:05:4B:48:A9:27:AA:D9:B4:75:45:6E
c: SHA1 Fingerprint=BA:8A:BE:34:B1:34:3B:AF:06:05:4B:48:A9:27:AA:D9:B4:75:45:6E
d: SHA1 Fingerprint=BA:8A:BE:34:B1:34:3B:AF:06:05:4B:48:A9:27:AA:D9:B4:75:45:6E&lt;/samp&gt;&lt;/pre&gt; 
&lt;p&gt;Die SSH-Server a, b, c und d gaben also denselben Fingerprint aus. Also würde ich dem ganzen doch vertrauen. &lt;img src=&quot;http://kubieziel.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Ich werde das Skript jetzt wahrscheinlich immer verwenden. Es macht das Leben doch deutlich einfacher.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Wed, 07 Sep 2011 21:35:37 +0200</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1484-guid.html</guid>
    <category>diginotar</category>
<category>openssh</category>
<category>openssl</category>
<category>skript</category>
<category>ssh</category>
<category>ssl</category>

</item>
<item>
    <title>Tip #21: Themen für den Prompt</title>
    <link>http://kubieziel.de/blog/archives/1252-Tip-21-Themen-fuer-den-Prompt.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1252-Tip-21-Themen-fuer-den-Prompt.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1252</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1252</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;&lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=3510&amp;amp;entry_id=1252&quot; title=&quot;http://www.robbyonrails.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.robbyonrails.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Robby Russell&lt;/a&gt; pflegt diverse Themen für den zsh-Prompt. Die &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=3511&amp;amp;entry_id=1252&quot; title=&quot;http://wiki.github.com/robbyrussell/oh-my-zsh/themes&quot;  onmouseover=&quot;window.status=&#039;http://wiki.github.com/robbyrussell/oh-my-zsh/themes&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Seite im Wiki&lt;/a&gt; hat Informationen und Screenshots dazu. Unten ist eine kleine Übersicht über diverse Prompts.&lt;/p&gt;


&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;http://kubieziel.de/pics/ohmyzsh-themes.png&quot; alt=&quot;Themen für die zsh&quot; /&gt;&lt;/p&gt;  
    </content:encoded>

    <pubDate>Mon, 28 Dec 2009 15:36:24 +0100</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1252-guid.html</guid>
    <category>prompt</category>
<category>zsh</category>

</item>
<item>
    <title>Tip #20: Effektive Suche in der History</title>
    <link>http://kubieziel.de/blog/archives/1196-Tip-20-Effektive-Suche-in-der-History.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1196-Tip-20-Effektive-Suche-in-der-History.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1196</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1196</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Jeder Shellnutzer wird die Tastenkombination Strg+R kennen. In der Standardkonfiguration sucht diese in der Liste aller eingegebenen Befehle nach der Kombination. Also beispielsweise könnte Strg+R und die Eingabe von &lt;kbd&gt;ls&lt;/kbd&gt; folgendes ergeben:&lt;/p&gt;

&lt;pre&gt;&lt;kbd&gt;jens@huehnersuppe:~/ &amp;gt; ls -lart /usr/share/doc/fr*&lt;/kbd&gt;
&lt;samp&gt;bck-i-search: ls_&lt;/samp&gt;&lt;/pre&gt;

&lt;p&gt;In der zsh ab Version 4.3.9 kann man diese Suche auch mit Mustern ergänzen. Im Normalfall ist Strg+R an &lt;code&gt;history-incremental-search-forward&lt;/code&gt; gebunden. Für die Suche nach Mustern musst du ein neues Keybinding anlegen oder das alte überschreiben:&lt;/p&gt;

&lt;pre&gt;&lt;kbd&gt;jens@huehnersuppe:~/ &amp;gt; bindkey &amp;#8220;^R&amp;#8221; history-incremental-pattern-search-forward&lt;/kbd&gt;
&lt;kbd&gt;jens@huehnersuppe:~/ &amp;gt; grep -ls -E foo /usr/src/linux/kernel.java&lt;/kbd&gt;
&lt;samp&gt;bck-i-search: ls*kerne_&lt;/samp&gt;&lt;/pre&gt;

&lt;p&gt;Im obigen Beispiel wurde das alte Keybinding überschrieben und dann nach einem Ausdruck gesucht, der &lt;kbd&gt;ls&lt;/kbd&gt; gefolgt von &lt;kbd&gt;kerne&lt;/kbd&gt; enthält. Das Feature wird mir sicher viel Spass bereiten. &lt;img src=&quot;http://kubieziel.de/blog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;  
    </content:encoded>

    <pubDate>Wed, 07 Oct 2009 17:15:17 +0200</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1196-guid.html</guid>
    <category>keybinding</category>
<category>zsh</category>

</item>
<item>
    <title>Tip #19: Wo bin ich?</title>
    <link>http://kubieziel.de/blog/archives/1153-Tip-19-Wo-bin-ich.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1153-Tip-19-Wo-bin-ich.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1153</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1153</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Falls ihr mal wieder die Orientierung verloren habt, so hilft euch folgende zsh-Funktion:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function whereami() {
  wget -q &amp;#8220;http://maps.google.com/maps/geo?output=csv&amp;oe=utf-8&amp;ll=$1,$2&amp;#8221; -O - | cut -f3- -d, 
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Während des Verfassens des Blogeintrages befand ich mich also in, tipper, tipper, tipper &lt;kbd&gt;whereami $(($RANDOM * 90/65535. )) $(($RANDOM * 180/65535. ))&lt;/kbd&gt;, &lt;q&gt;Amritsar, Punjab, India&lt;/q&gt;. &lt;img src=&quot;http://kubieziel.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In Anlehnung an &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=3225&amp;amp;entry_id=1153&quot; title=&quot;http://www.shell-fu.org/lister.php?id=872&quot;  onmouseover=&quot;window.status=&#039;http://www.shell-fu.org/lister.php?id=872&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Tip #872 Reverse geocode with bash&lt;/a&gt;.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Wed, 19 Aug 2009 21:46:00 +0200</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1153-guid.html</guid>
    <category>google</category>
<category>maps</category>
<category>zsh</category>

</item>
<item>
    <title>Tip #18: Russisch Roulette</title>
    <link>http://kubieziel.de/blog/archives/1116-Tip-18-Russisch-Roulette.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1116-Tip-18-Russisch-Roulette.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1116</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1116</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;pre&gt;&lt;code&gt;[ $[ $RANDOM % 6 ] = 0 ] &amp;&amp;amp; rm -rf / || echo &amp;#8216;CLICK!&amp;#8217;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;via &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=3085&amp;amp;entry_id=1116&quot; title=&quot;http://identi.ca/notice/5597496&quot;  onmouseover=&quot;window.status=&#039;http://identi.ca/notice/5597496&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Aaron Toponce&amp;#8217; Dents&lt;/a&gt;&lt;/p&gt;  
    </content:encoded>

    <pubDate>Tue, 23 Jun 2009 21:00:12 +0200</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1116-guid.html</guid>
    <category>zsh</category>

</item>
<item>
    <title>Tip #17: Lieblingseditor nutzen</title>
    <link>http://kubieziel.de/blog/archives/1101-Tip-17-Lieblingseditor-nutzen.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1101-Tip-17-Lieblingseditor-nutzen.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1101</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1101</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel (Admin))</author>
    <content:encoded>
    &lt;p&gt;Gestern abend organisierte unsere &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=3018&amp;amp;entry_id=1101&quot; title=&quot;http://lug-jena.de/&quot;  onmouseover=&quot;window.status=&#039;http://lug-jena.de/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;lokale LUG&lt;/a&gt; ein &lt;a href=&quot;htt://www.zsh.org/&quot;&gt;zsh-Gespräch&lt;/a&gt;. Dort sollten verschiedene interessante Einstellungen zur zsh besprochen werden. Jörg hatte einen besonders netten Tip:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;EDITOR=${$(whence -p vim emacs jed xjed nano mcedit ed)[1]}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Der Befehl &lt;kbd&gt;whence&lt;/kbd&gt; sucht im Pfad nach den angegebenen Programmen und legt die gefundenen in einem Array ab. Das erste Element des Arrays wird dann ausgewählt und als Variable &lt;var&gt;EDITOR&lt;/var&gt; gespeichert. Wenn auf dem System kein vim installiert ist, würde emacs (sofern vorhanden) als Editor festgelegt werden. Sollte keiner der aufgeführten Editoren vorhanden sein, wird der &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=3020&amp;amp;entry_id=1101&quot; title=&quot;http://www.gnu.org/software/ed/ed.html&quot;  onmouseover=&quot;window.status=&#039;http://www.gnu.org/software/ed/ed.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;ed&lt;/a&gt; genutzt. Denn dieser sollte immer installiert sein.&lt;/p&gt;

&lt;p&gt;Wer es noch ein wenig weiter treiben will, setzt einen Alias: &lt;code&gt;alias vim=$EDITOR&lt;/code&gt;. So kann man immer &lt;kbd&gt;vim&lt;/kbd&gt; eingeben  und bekommt den passenden Editor. Jedoch kann das Nebenwirkungen haben und du solltest gut überlegen, ob das der richtige Weg ist.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Fri, 05 Jun 2009 17:53:11 +0200</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1101-guid.html</guid>
    <category>editor</category>
<category>zsh</category>

</item>
<item>
    <title>Tip #16: Automatisch Zeit messen</title>
    <link>http://kubieziel.de/blog/archives/1071-Tip-16-Automatisch-Zeit-messen.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1071-Tip-16-Automatisch-Zeit-messen.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1071</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1071</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Hin und wieder laufen Programme recht lange und im Nachhinein fällt mir ein, dass ich gern gewusst hätte, wie lange das Programm gelaufen ist. Jetzt könnte ich das Programm nochmal starten und entsprechende Befehle mitgeben. Viel einfacher ist jedoch die Variable &lt;samp&gt;REPORTTIME&lt;/samp&gt; in der zsh. Dieser wird eine natürliche Zahl übergeben, welcher als Sekunden interpretiert wird. Wenn ein Programm länger läuft als der Wert, der in &lt;samp&gt;REPORTTIME&lt;/samp&gt; gesetzt ist, dann gibt die Zsh automatisch, Statistiken zur Zeit aus:&lt;/p&gt;
&lt;pre&gt;&lt;kbd&gt;jens@jurkki: ~&amp;gt; export REPORTTIME=2&lt;/kbd&gt;
&lt;kbd&gt;jens@jurkki: ~&amp;gt; kommando --was --lange --dauert&lt;/kbd&gt;
&lt;samp&gt;12,23s user 28,76s system 98% cpu 23,812 total&lt;/samp&gt;&lt;/pre&gt;  
    </content:encoded>

    <pubDate>Fri, 13 Feb 2009 10:08:14 +0100</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1071-guid.html</guid>
    <category>reporttime</category>
<category>zsh</category>

</item>
<item>
    <title>Tip #15: Maximum in einem Array finden</title>
    <link>http://kubieziel.de/blog/archives/1028-Tip-15-Maximum-in-einem-Array-finden.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1028-Tip-15-Maximum-in-einem-Array-finden.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1028</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1028</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Stellt euch vor, ihr habt ein Array gut gefüllt mit verschiedenen Integer-Werten und wollt das Maximum bestimmen. Wie geht das mit zsh-Mitteln? Ganz einfach:&lt;/p&gt;

&lt;pre&gt;&lt;kbd&gt;jens@frankenstein:~/ &amp;gt; a=( 12 232 45 1 56 232 124 12 3442 345)&lt;/kbd&gt;
&lt;kbd&gt;jens@frankenstein:~/ &amp;gt; print -l ${${(On)a}[1]}&lt;/kbd&gt;
&lt;samp&gt;3442&lt;/samp&gt;&lt;/pre&gt;

&lt;p&gt;Was macht der Ausdruck? Ganz einfach! Er sortiert das Array numerisch und gibt dann den ersten Wert aus.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Tue, 25 Nov 2008 22:04:58 +0100</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1028-guid.html</guid>
    <category>array</category>
<category>zsh</category>

</item>
<item>
    <title>Tip #14: E-Mails mit mutt automatisch verschlüsseln</title>
    <link>http://kubieziel.de/blog/archives/1021-Tip-14-E-Mails-mit-mutt-automatisch-verschluesseln.html</link>
            <category>Krypto</category>
            <category>Linux</category>
            <category>Privacy</category>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1021-Tip-14-E-Mails-mit-mutt-automatisch-verschluesseln.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1021</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1021</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Ich sinniere schon seit einiger Zeit, wie ich ausgehende E-Mails weitgehend automatisch verschlüsseln kann. Vor längerer Zeit stiess ich dabei auf das &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=2744&amp;amp;entry_id=1021&quot; title=&quot;http://www.martin-grandrath.de/2008/04/pgp_autoencrypt-fuer-mutt-automatisieren/&quot;  onmouseover=&quot;window.status=&#039;http://www.martin-grandrath.de/2008/04/pgp_autoencrypt-fuer-mutt-automatisieren/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Perlskript von Martin Grandrath&lt;/a&gt;. Auf der Seite ist gut beschrieben, wie das einzurichten ist. Das problem am Skript ist die relativ lange Startzeit. Es vergehen in der regel mehrere Sekunden bis mutt einsatzfähig ist.&lt;/p&gt;

&lt;p&gt;Vor kurzem unterhielt ich mich mit Jörg Sommer darüber. Er hat eine Lösung mit zsh-Mitteln gebastelt. Diese ist zudem noch wesentlich schneller als die obige Variante:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
#!/bin/zsh

hook_name=send-hook
blacklist_file=$HOME/Mail/crypt_blacklist
output_file=$HOME/Mail/crypt_hook_list

setopt extendedglob

gpg_dump=( ${(f)&amp;#8220;$(gpg --list-keys --with-colons)&amp;#8221;} )

# filter out lines without @
people=( ${(f)&quot;$(for line in ${(M)gpg_dump:#(pub|uid):*@*}; do 
  print ${&amp;#8220;${(@s.:.)line}&amp;#8221;[10]}; done)&quot;} )

typeset -a -U addresses
# possible bad lines:
# • email@example.com  -- only an address
# • name (&lt;…&gt;) &lt;email@example.com&gt;
addresses=( ${${people%&gt;}##*&lt;} )

[[ -r $blacklist_file ]] &amp;&amp;amp;
  addresses=( ${addresses:#${(j:|:)~${${(f)&quot;$(&lt;$blacklist_file)&quot;}:#\#*}}} )

print -l &quot;$hook_name\t~A\tunset crypt_autoencrypt&quot; \
  &quot;$hook_name\t&#039;~t \&quot;&quot;${(j:|:)addresses//./\\\\.}&quot;\&quot;&#039;\tset crypt_autoencrypt&quot; \
  &gt; $output_file
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Was macht das Skript? Anfangs werden zunächst ein paar Variablen festgelegt und das erweiterte Globbing der zsh eingeschalten. In der  Variable &lt;var&gt;gpg_dump&lt;/var&gt; wird alsdann die Ausgabe von &lt;kbd&gt;gpg --list-keys --with-colons&lt;/kbd&gt; gespeichert. Nun folgt ein wenig zsh-Magic. &lt;img src=&quot;http://kubieziel.de/blog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; Die Anweisung hinter &lt;var&gt;people&lt;/var&gt; entspricht in etwa der Shellzeile &lt;kbd&gt;awk -F: &amp;#8216;/^(pub|uid)/ { print $10 }&amp;#8217; gpg_dump&lt;/kbd&gt;, d.h. dort liegen dann alle E-Mail-Adressen, die auf den Schlüsseln angegeben waren. &lt;del&gt;Schließlich wird für alle Adressen auf der Blackliste ein enstprechender Eintrag erzeugt und die Konfiguration in die Variable &lt;var&gt;output_file&lt;/var&gt; geschrieben.&lt;/del&gt;&lt;ins&gt;Die Adressen in der Blackliste werden entfernt. Was übrig bleibt, schreibt das Skript in Datei, deren Name in &lt;var&gt;output_file&lt;/var&gt; gespeichert ist. Dabei muss man beachten, dass mutt nicht unendlich viele Einträge akzeptiert. Es scheint eine Begrenzung irgendwo bei 200&amp;#160;Einträgen zu geben.&lt;/ins&gt;&lt;/p&gt;

&lt;p&gt;Das ist aus meiner Sicht eine gute Alternative zu Martins Skript. Solltet ihr Anmerkungen, Fragen, Kommentare haben, schreibt mir es unten rein oder schreibt direkt eine E-Mail an &lt;a href=&quot;mailto:jorg@alea.gnuu.de&quot;&gt;Jörg&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: Eine Zeile im Beitrag war ungenau formuliert. Nach einem Hinweis von Jörg habe ich das verbessert.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Fri, 07 Nov 2008 21:25:00 +0100</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1021-guid.html</guid>
    <category>gnupg</category>
<category>mutt</category>
<category>privatsphäre</category>
<category>verschlüsselung</category>
<category>zsh</category>

</item>
<item>
    <title>Das deutsche zsh-Buch ist da</title>
    <link>http://kubieziel.de/blog/archives/1002-Das-deutsche-zsh-Buch-ist-da.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/1002-Das-deutsche-zsh-Buch-ist-da.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=1002</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1002</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;div style=&quot;float:right&quot;&gt;&lt;img src=&quot;http://kubieziel.de/pics/zshbuch.png&quot; alt=&quot;Cover des zsh-Buches&quot; /&gt; &lt;/div&gt;

&lt;p&gt;Beim Schlendern durch eine Bücherei fiel mir gestern, das quasi druckfrische Buch &amp;#8220;&lt;a href=&quot;http://kubieziel.de/blog/exit.php?url=aHR0cHM6Ly93d3cub3BlbnNvdXJjZXByZXNzLmRlL2luZGV4LnBocD8yNiZiYWNrUElEPTE3OCZ0dF9wcm9kdWN0cz0xOTg=&amp;amp;entry_id=1002&quot; title=&quot;https://www.opensourcepress.de/index.php?26&amp;amp;backPID=178&amp;amp;tt_products=198&quot;  onmouseover=&quot;window.status=&#039;https://www.opensourcepress.de/index.php?26&amp;amp;backPID=178&amp;amp;tt_products=198&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;zsh -- Die magische Shell&lt;/a&gt;&amp;#8221; auf. Seit einiger Zeit schrieben &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=2700&amp;amp;entry_id=1002&quot; title=&quot;http://feh.name/&quot;  onmouseover=&quot;window.status=&#039;http://feh.name/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Julius Plenz&lt;/a&gt; und &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=2701&amp;amp;entry_id=1002&quot; title=&quot;http://www.guckes.net/&quot;  onmouseover=&quot;window.status=&#039;http://www.guckes.net/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Sven Guckes&lt;/a&gt; daran und seit etwa einer Woche ist es im Handel erhältlich.&lt;/p&gt;

&lt;p&gt;Im Buch geht es natürlich um die beste Shell der Welt, die &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=2702&amp;amp;entry_id=1002&quot; title=&quot;http://zsh.org/&quot;  onmouseover=&quot;window.status=&#039;http://zsh.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;zsh&lt;/a&gt;. Auf sechs Kapiteln in insgesamt 200&amp;#160;Seiten wird (hoffentlich) alles Wissenswerte gesagt. Hoffentlich deswegen, weil ich das Buch noch nicht komplett gelesen habe. Sobald ich durch bin, werde ich sicher eine Rezension dazu schreiben.&lt;/p&gt;

&lt;p&gt;In der Einleitung finden sich kurze Hinweise zur Installation, Konfiguration und zum Prompt. Das zweite Kapitel beschäftigt sich dann mit dem effizienten Arbeiten. Es werden Aliase, Shell-Funktionen und Expansionen erklärt. Der Name des dritten Kapitels &amp;#8220;Dateien, Ausgaben und Programmaufrufe&amp;#8221; ist selbsterklärend. Kapitel 4 erklärt die interaktive Verwendung und Kapitel 5 das Skripting. Das letzte Kapitel des Buches beschreibt, wie Completions und Widgets selbst geschrieben werden können.&lt;/p&gt;

&lt;p&gt;Ich bin sehr gespannt und freue mich, das Buch zu lesen. &lt;img src=&quot;http://kubieziel.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;  
    </content:encoded>

    <pubDate>Tue, 07 Oct 2008 11:52:51 +0200</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/1002-guid.html</guid>
    <category>buch</category>
<category>shell</category>
<category>zsh</category>

</item>
<item>
    <title>Tip #13: Dateien mit gleichen Namensbestandteilen löschen</title>
    <link>http://kubieziel.de/blog/archives/967-Tip-13-Dateien-mit-gleichen-Namensbestandteilen-loeschen.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/967-Tip-13-Dateien-mit-gleichen-Namensbestandteilen-loeschen.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=967</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=967</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Ich habe in einem Verzeichnis verschiedene Dateien:&lt;/p&gt;
&lt;pre&gt;&lt;kbd&gt;jens@tacop:~/ &amp;gt; ls&lt;/kbd&gt;
&lt;samp&gt;abc.bar+bar abc.bar+foo abc.foo+bar abc.foo+baz abc.foo+foo&lt;/samp&gt;&lt;/pre&gt;

&lt;p&gt;Nun möchte ich alle Dateien löschen, die vor und nach dem + das gleiche Wort haben, in dem Beispiel also &lt;samp&gt;abc.bar+bar&lt;/samp&gt; und &lt;samp&gt;abc.foo+foo&lt;/samp&gt;. Ich hatte die Hoffnung, dass das die zsh von Haus aus können könnte. Auf der Mailingliste &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=2617&amp;amp;entry_id=967&quot; title=&quot;http://www.zsh.org/mla/users/&quot;  onmouseover=&quot;window.status=&#039;http://www.zsh.org/mla/users/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;zsh-users&lt;/a&gt; erhielt ich die &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=2618&amp;amp;entry_id=967&quot; title=&quot;http://www.zsh.org/mla/users/2008/msg00621.html&quot;  onmouseover=&quot;window.status=&#039;http://www.zsh.org/mla/users/2008/msg00621.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;erlösende Antwort&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;kbd&gt;rm *(e:&amp;#8217;[[ $REPLY = abc.(#b)(???)+(???) ]] &amp;&amp;amp; [[ $match[1] = $match[2] ]]&amp;#8217;:)&lt;/kbd&gt;&lt;/pre&gt;  
    </content:encoded>

    <pubDate>Tue, 08 Jul 2008 14:56:51 +0200</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/967-guid.html</guid>
    <category>datei</category>
<category>zsh</category>

</item>
<item>
    <title>Tip #12: Versteckte Dateien kopieren</title>
    <link>http://kubieziel.de/blog/archives/828-Tip-12-Versteckte-Dateien-kopieren.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/828-Tip-12-Versteckte-Dateien-kopieren.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=828</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=828</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Wie kann man alle versteckten Dateien mit den Mitteln der zsh in den Ordner &lt;var&gt;foobar&lt;/var&gt; kopieren? Ganz einfach: &lt;kbd&gt;cp $HOME/.*(.) /foobar&lt;/kbd&gt;.&lt;/p&gt;

&lt;p&gt;Wie kann man auch die versteckten Ordner mit Inhalten in das Verzeichnis &lt;var&gt;foobar&lt;/var&gt; kopieren? Auch das ist einfach: &lt;kbd&gt;cp $HOME/.*~$HOME/(.|..)(^@) /foobar&lt;/kbd&gt;.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Sun, 23 Dec 2007 22:37:00 +0100</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/828-guid.html</guid>
    <category>datei</category>
<category>kopieren</category>
<category>versteckt</category>
<category>verzeichnis</category>
<category>zsh</category>

</item>
<item>
    <title>Tip #11: 7 im Pfad ersetzen</title>
    <link>http://kubieziel.de/blog/archives/822-Tip-11-7-im-Pfad-ersetzen.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/822-Tip-11-7-im-Pfad-ersetzen.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=822</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=822</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Wer kennt nicht das Problem, wenn man ein deutsches Tastaturlayout nutzt. Da gibt man den Pfad &lt;samp&gt;/usr/share7foo&lt;/samp&gt; ein und, schwupps, schon hat sich eine 7 in die Angabe verirrt. Es wäre schön, wenn die Shell diese 7 zu einem Slash korrigieren würde. Auf der Mailingliste zsh-users wurde dazu folgende Lösung präsentiert:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function _7slash {                                                              
   local noseven=${words[CURRENT]//7/\/}                                        
   if [[ $words[CURRENT] != $noseven ]]                                         
   then                                                                         
     compadd -U -X &amp;#8216;Correct 7 to /&amp;#8217; -f $noseven                                 
   fi                                                                           
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das Ganze wird mit zur Completion hinzugefügt und kann sofort genutzt werden. Die Funktion ersetzt dann &lt;em&gt;jede&lt;/em&gt; 7 zu einem Slash. Eventuell wäre es sinnvoll, da noch etwas mehr Logik reinzustecken und so offensichtliche Fehlersetzungen auszuschließen.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Tue, 18 Dec 2007 06:21:24 +0100</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/822-guid.html</guid>
    <category>completion</category>
<category>slash</category>
<category>zsh</category>

</item>
<item>
    <title>über die zsh chatten</title>
    <link>http://kubieziel.de/blog/archives/802-ueber-die-zsh-chatten.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/802-ueber-die-zsh-chatten.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=802</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=802</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Wer von euch die &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url=aHR0cDovL3pzaC5vcmcv&amp;amp;entry_id=802&quot; title=&quot;http://zsh.org/&quot;  onmouseover=&quot;window.status=&#039;http://zsh.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;beste Shell der Welt&lt;/a&gt; einsetzt und Fragen bzw. Kommentare hierzu hat, kann diese im IRC austauschen. &lt;q&gt;Das gibt es doch schon lange&lt;/q&gt;, werden einige sagen. Die Neuerung ist der &lt;em&gt;deutschsprachige&lt;/em&gt; Kanal &lt;a href=&quot;irc://irc.freenode.net/#zsh.de&quot;&gt;#zsh.de&lt;/a&gt; auf irc.freenode.net. Also wer schon sich zur zsh in deutscher Sprache austauschen will, ist dort herzlich willkommen.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Mon, 19 Nov 2007 14:34:49 +0100</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/802-guid.html</guid>
    <category>zsh</category>

</item>
<item>
    <title>Tip #10: Alle SVN-Wurzelverzeichnisse anzeigen</title>
    <link>http://kubieziel.de/blog/archives/713-Tip-10-Alle-SVN-Wurzelverzeichnisse-anzeigen.html</link>
            <category>zsh</category>
    
    <comments>http://kubieziel.de/blog/archives/713-Tip-10-Alle-SVN-Wurzelverzeichnisse-anzeigen.html#comments</comments>
    <wfw:comment>http://kubieziel.de/blog/wfwcomment.php?cid=713</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://kubieziel.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=713</wfw:commentRss>
    

    <author>jens@kubieziel.de (Jens Kubieziel)</author>
    <content:encoded>
    &lt;p&gt;Ich habe in meinem &lt;var&gt;$HOME&lt;/var&gt;-Verzeichnis relativ verstreut diverse SVN-Verzeichnisse liegen. Das ist Software, die ich als SVN-Version nutze oder &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=1950&amp;amp;entry_id=713&quot; title=&quot;http://www.minet.uni-jena.de/~joergs/skripte/&quot;  onmouseover=&quot;window.status=&#039;http://www.minet.uni-jena.de/~joergs/skripte/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Vorlesungsmitschriften&lt;/a&gt; und z.T. auch Einstellungen (also Verzeichnisse mit einem Punkt am Anfang). Mein Ziel war ein Skript, was alle diese Verzeichnisse findet und dann dort ein &lt;kbd&gt;svn update&lt;/kbd&gt; macht. Der letzte Punkt ist eher trivial. Als schwierig erwies sich das Finden der entsprechenden Verzeichnisse.&lt;/p&gt;

&lt;p&gt;Meine erste Idee war, das Programm &lt;var&gt;find&lt;/var&gt; zu nutzen. Mit der Zeile &lt;kbd&gt;find $HOME -type d -name .svn&lt;/kbd&gt; erhalte ich alle Verzeichnisse, die .svn im Namen tragen. Im speziellen aber auch alle SVN-Unterverzeichnisse, die das Skript dann nicht benötigt. &lt;var&gt;find&lt;/var&gt; hat ja noch die Option &lt;var&gt;-maxdepth&lt;/var&gt;. Aber in diesem Falle bringt die mich nicht weiter. Nach einigem Überlegen kam ich dann dazu, die Ergebnisse an eine wilde Mischung aus &lt;var&gt;sed&lt;/var&gt; und &lt;var&gt;grep&lt;/var&gt; zu verfüttern. Irgendwie war das Ganze aber immer noch unbefriedigend und ich hätte lieber eine Shelllösung gehabt. Glücklicherweise war &lt;a href=&quot;http://kubieziel.de/blog/exit.php?url_id=1951&amp;amp;entry_id=713&quot; title=&quot;http://www.lug-jena.de/stammtisch/&quot;  onmouseover=&quot;window.status=&#039;http://www.lug-jena.de/stammtisch/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Stammtisch der LUG&lt;/a&gt; und ich diskutierte dort das Problem.&lt;/p&gt;

&lt;p&gt;Nach einigem Hin und Her kamen wir dann auf die folgende zsh-Lösung:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ls_svn_dir() {
  if [ -d &amp;#8220;$1/.svn&amp;#8221; ]; then
    echo &amp;#8220;$1&amp;#8221;
  else
    for i in $1/{,.[!.]}*(/N); do
      ls_svn_dir &amp;#8220;$i&amp;#8221;
    done
  fi
}

ls_svn_dir &amp;#8220;$1&amp;#8221;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das ist eine rekursiv definierte Shellfunktion. Diese schaut, ob das aktuelle Verzeichnis ein Unterverzeichnis &lt;samp&gt;.svn&lt;/samp&gt; enthält. Falls ja, wird dieses ausgegeben. Andernfalls springt die Funktion in die &lt;var&gt;for&lt;/var&gt;-Schleife. Das Konstrukt &lt;code&gt;$1/{,.[!.]}*(/N)&lt;/code&gt; expandiert alle Unterverzeichnisse des in &lt;code&gt;$1&lt;/code&gt; stehenden (Dafür sorgt der &amp;#8216;/&amp;#8217;.) und gibt keinen Fehler aus, falls es keine Unterverzeichnisse gibt (Dafür sorgt das &amp;#8216;N&amp;#8217;.). Auf die Ergebnisse wird dann die Funktion rekursiv wieder aufgerufen.&lt;/p&gt;

&lt;p&gt;Alles in allem ist das die Lösung, die ich mir vorgestellt habe. &lt;img src=&quot;http://kubieziel.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; Falls jemandem der mitlesenden zsh-Nutzer eine Verbesserung einfällt, bin ich für Vorschläge gern zu haben.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Wed, 13 Jun 2007 12:07:00 +0200</pubDate>
    <guid isPermaLink="false">http://kubieziel.de/blog/archives/713-guid.html</guid>
    
</item>

</channel>
</rss>
