Twitter (was mache ich gerade?)

    Suche

     

    Credits

    Archiv

    Februar 2007
    Mo
    Di
    Mi
    Do
    Fr
    Sa
    So
     
     
     
     2 
     3 
     5 
     9 
    10
    11
    13
    14
    15
    16
    17
    18
    19
    20
    22
    25
    26
    28
     
     
     
     
     

    Status

    Online seit 6711 Tagen
    Zuletzt aktualisiert: 17. Apr, 22:03

    Counter & Co.

    Egoload - Verträumter Idealist
    Mein
Koordinaten auf der EgoMap:  93,2
    100% Heidnisch

    Locations of visitors to this page

    Dienstag, 27. Februar 2007

    Volksverdummung

    Der Raab fährt mit einem Hubsteiger unter die Decke seines Fernsehstudios um eine Glühbirne gegen eine Energiesparlampe auszuwechseln und sein Publikum applaudiert. Es wird echt Zeit, die Glotze auszumachen. *Kopschüttel*

    ZModules: stat

    Der Funktionsumfang der zsh kann durch Module erweitert werden. Aufgelistet sind diese in der manpage zu zshmodules (welche Überraschung).

    Eines davon ist das Module zsh/stat, das Zugriff auf den gleichnamigen Systemcall bietet:
    
    % zmodload zsh/stat
    % touch somefile
    % ls -l somefile
    -rw-r--r--  1 cptsalek  1001  0 Feb 27 22:16 somefile
    % stat somefile
    device  98
    inode   376964
    mode    33188
    nlink   1
    uid     1001
    gid     1001
    rdev    0
    size    0
    atime   1172610986
    mtime   1172610986
    ctime   1172610986
    blksize 4096
    blocks  0
    link
    
    Ok, das geht natürlich auch in einem menschenlesbaren Format:
    
    % stat -s somefile
    device  98
    inode   376964
    mode    -rw-r--r--
    nlink   1
    uid     cptsalek
    gid     1001
    rdev    0
    size    0
    atime   Tue Feb 27 22:16:26
    mtime   Tue Feb 27 22:16:26
    ctime   Tue Feb 27 22:16:26
    blksize 4096
    blocks  0
    link
    
    Yepp, mit stat kann man alle Daten, die zu einem File gehlören, in einem Rutsch auslesen, ohne mit ls, grep und Co. irgendwelche Orgien zu feiern. Und weils so praktisch ist, kann man das die Ausgabe auch in ein Hash eintüten:
    
    % stat -onH hash somefile
    % echo ${${hash[mode]}[4,7]}
    0644
    
    ...voila, womit man die Permissions erschlagen hätte.

    Muschelspaß

    Ich weiß garnicht mehr wie, aber vor einer Weile bin ich über die zsh gestolpert. Und seitdem ist diese höchst komfortable und genial programmierbare Shell zu meinem Standard geworden.
    Mäuschenschubser können an dieser Stelle übrigens aufhören zu lesen. ;-)

    Warum?
    Also da wäre z.B. die ZSH-Liebhaberseite.
    Eigentlich ist damit auch schon alles gesagt, meine Favoriten sind
    • Arrays
    • Assoziative Arrays ("Hashes")
    • Positionsparameter in Strings
    • Mächtige Parameter/Command/Argument-Expansion
    Hier mal einige Beispiele:
    
    typeset -a array
    array=( "${(f)$(ls -l)}" )
    
    Diese kleine Codezeile liest die Ausgabe des ls-Befehls in ein Array ein, und zwar Zeilenweise. Ein spezielles Konstrukt gibt es für Dateien, mit dem man auf cat verzichten kann:
    
    typeset -a array
    array=( "${(f)$(< dateiname)}" )
    
    Das funktioniert zwar hervorragend, entfernt aber alle Leerzeichen, die in der Datei vorkommen. So lange man das File nur lesen will ist das in Ordnung, wenn man es aber verarbeiten und die neue Fassung wieder ausgeben möchte, ist das ein K.O-Kriterium. Hier funktioniert dann sowas wie:
    
    typeset -a array
    < ldap_user_passwd while { read line } { content+=$line$'\n' }
    
    Die Konstruktion stammt von der zsh-Users Liste, und hat nach einem kurzen Test den Nachteil, dass hier an jede Zeile ein zusätzliches \n angehängt wird. Also:
    
    typeset -a array
    < ldap_user_passwd while read line
    do
      if [[ $array == "" ]] then
       array+=" "
      else
        array+=$line
      fi
    done
    
    Die if-then Geschichte kann man mit der zsh auch nett umgehen:
    
    [[ $array == "" ]] && { array+=" " } || { array+=$line }
    

    Wie gesagt kennt die zsh nicht nur Strings, sondern auch Arrays. Daher werden Strings auch anders verarbeitet. Die Zeichenkette
    string="Hallo Welt" wird z.B. in einer Schleife nicht in die Elemente "Hallo" und "Welt" zerlegt, wie das bei sh-kompatiblen Shells der Fall ist.
    Erst wenn man das mal verwendet hat um wie schon gesagt zeilenweise Dateien zu verarbeiten, merkt man, wie nützlich das ist.
    Apropos nützlich:
    
    for line in $array
    do
      [[ $line == *${suchwort}* ]] && { echo "Suchbegriff gefunden." }
    done
    
    Find ich genial... :-)
    Und wo wir gerade bei genial sind, hier ein Beispiel für die Positionsparameter:
    
    % typeset -a array
    % array=( Hallo Welt )
    % echo ${array[1]}
    Hallo
    % echo ${array[2]}
    Welt
    % echo ${${array[2]}[1]}
    W
    
    More to come. :-)

    Aktuelle Beiträge

    Im happy I finally registered
    Excellent write-up. I absolutely love this site. Continue...
    http://mittenmail3.isblog.net/pick-a-winner-via-hashtag-entry-for-twitter-and-instagram-woobox-bl... (Gast) - 17. Apr, 22:03
    Just want to say Hi!
    I all the time emailed this blog post page to all...
    how to get instagram likes (Gast) - 30. Mär, 23:20
    Im happy I now signed...
    Hello, There's no doubt that your website could possibly...
    buy instagram followers cheap (Gast) - 30. Mär, 09:27
    Hallo Miau!
    Ich will einen schönen Tag wünschen, mit unseren Schmusekatzen....
    SCHLAGLOCH - 4. Apr, 14:51
    Sehe hier nut Tag und...
    Wo ist das Jahr an dem der Text geschrieben wurde?
    Gast (Gast) - 3. Mär, 20:38

    User Status

    Du bist nicht angemeldet.

    ...wenn man trotzdem lacht
    Atari Mega ST
    Auf Arbeit
    Bloggen
    Bookmarks & Links
    BSD
    Bundeswehr
    CCC07
    Computing
    Contentmafia
    Datenschutz
    DRM
    Fahrrad
    Finanzkrise
    Fundsachen
    G8
    ... weitere
    Profil
    Abmelden
    Weblog abonnieren