Schlagwort-Archive: bash

Ein Register für’s PDF

Kürzlich stand ich vor der Aufagabe ein Orts- und ein Personenregister für ein PDF zu erzeugen. Der Text lag druckfertig als PDF vor. Das Personen- und Ortsregister als Wörstdokument (natürlich!) – ließ sich aber problemlos als Text speichern, so dass jeweils ein Eintrag pro Zeile ausgegeben wurde – unter Umständen eben länger als eine Bildschirmzeile, weil nicht nur der Name dastand, sondern üppig anreichernde Informationen.

Mit Linuxmitteln ist das eine Aufgabe, die sich nicht vollautomatisch erledigen lässt (nicht dass ich wüßte), aber viele Arbeitsschritte lassen sich teilautomatisieren. Sehr zum Nachteil der armen Textverarbeiter kennen diese natürlich nur selten die Möglichkeiten kleiner Programme wie grep, sed, sort, cat, head, tail und all die anderen. Sonst könnten sie sich das Leben oft selbst vereinfachen. Weiterlesen

schrumpf5.sh

Ich habe oft massig BIlder, die ich in der Auflösung der Camera von 4000×3000 Pixeln importiert habe, und will es schrumpfen, wobei ich es im Betrachter vielleicht schon gedreht habe, so dass es nun 3000×4000 Pixel ist, oder es ist beschnitten worden und hat 1762×964 Pixel und dennoch will ich es auf 1/5 eindampfen. Weiterlesen

machVerzeichnisHier

In Thunar, einem Dateimanager unter Linux der oft bei xfce mit Xubuntu zum Einsatz kommt, fehlt m.E. die Funktion in einem Verzeichnis ein neues Unterverzeichnis zu machen.

Um für dieses gleich einen Namen anzugeben empfiehlt sich ein Tool wie Zenity, mit dem man einfache, grafische Dialoge erzeugen kann. Installieren kann man es mit sudo apt-get install zenity oder über Synaptic, wenn man auch das mit einem Fensterprogramm machen möchte.

<code>

#!/bin/bash
#
#

verzeichnisname=$(zenity –entry –text=“neuer Verzeichnisname“)

if [ ! -e „$verzeichnisname“ ]
then
mkdir ./“$verzeichnisname“ 2>> /home/stefan/newThunarDir.log
fi

</code>

Weiterlesen

Störenfried Grafikterminal

Vielleicht kennt Ihr das Spiel. Man schlägt mit verbundenen Augen ein Lexikon oder Wörterbuch auf, und piekst mit einer Nadel oder einer Bleistiftspitze auf ein Wort. Das wiederholt man und muss dann aus den zufällig gewählten Worten eine Geschichte bilden oder einen Satz. Das kann ein Partyspass sein oder ein Trick, die eigene Kreativität anzuregen.

Statt sich mühsam die Augen zu verbinden und beim Gestocher zwischen den Wörtern mühsam zu entscheiden, welchem Wort die Stiftspitze nun näher war ist ein handlicher Rechner mit Shellscript viel handlicher, vorzugsweise ein Linuxrechner mit lustigen Pinguinaufklebern, OSX soll angeblich auch gehen, notfalls sogar Ballmerware für die es Native Win32 ports of some GNU utilities gratis und quelloffen gibt, ein unschätzbares Sammelsurium nützlicher Programme, von  cat über grep zu sed und wc. Ich habe vor ab und zu das ein oder andere kurz vorzustellen, und zum Experimentieren anzuregen.

Hier unten sehen wir eine Unsitte von Programmierern, nämlich ein ganzes, kleines Programm in eine Zeile zu quetschen:

<cite>

dat=/usr/share/hunspell/de_DE.dic; wcl=$(wc -l $dat); for dummy in foo bar; do z=$((RANDOM*RANDOM%${wcl/ */})); sed -n ${z}p $dat; done

</cite>

Störenfried/EPSTm

Graphikterminal/Sm Weiterlesen

bash: contains

Das contains – Schlüsselwort ist praktisch, um eine Liste von Parametern darauf hin zu testen, ob sie ein bestimmtes Wort enthält. Die Syntax ist so, dass, da es in der Bash keine Listen gibt, der erste Parameter das zu prüfende Wort ist, und der Rest der Parameter ist die Liste.

Was in Scala etwa

List (1, 2, 4, 9).contains (4)

wäre, wäre in der Bash:

contains 4 1 2 4 9

Weiterlesen

fcd (fast-cd, eine Bashfunktion für Linux)

Problem:

Wie tauche ich schnell tief in ein Verzeichnis hinab? Wo finde ich ein Verzeichnis, dessen Pfad ich teilweise vergessen habe?

Lösung für eine beachtliche Teilmenge an Fällen:

fcd
Hier die Funktion als Ganzes – Erläuterung folgt unten:

fcd ()
{
  list=$(locate $1 | egrep "/$1$")
  count=$(echo $list | wc -w )
  case $count in
  0)
    echo "unknown directory: "$1 && return
    # could search for partial matches Doc => Documentation
    ;;
  1)
    if [[ -d "$list" ]]; then
    echo "1) match: $list"
    cd "$list"
    else
    echo "not a directory: $1"
    fi
    ;;
  *)
   select directory in $list "/exit/"
   do
     if [[ "$directory" = "/exit/" ]]; then break; fi
     if [[ -d "$directory" ]]; then
       echo "multi) $directory"
       cd "$directory"
       break
     else
       echo "not a directory: "$1 
     fi
   done
   ;;
  esac
}

Weiterlesen