AA_steps_saavem_sxc_1250475.jpg

© Saavem, sxc.hu

Schrittweise

Vom Shell-Skript zum kompakten Powertool

13.05.2013
Auf der Basis einiger einfacher Shell-Befehle erstellen Sie mit wenig Aufwand ein flexibles, aber robustes Desktop-Tool.

Manchmal muss es schnell gehen: Liefert die Suche nach einem bestimmten Tool keine befriedigenden Ergebnisse, zimmert sich der kundige Linux-Anwender mit wenigen Zeilen Shell-Code eine eigene Lösung zusammen. Mit der Zeit wachsen dann die Anforderungen, aus dem schnell entworfenen Skript entsteht schließlich ein robustes Programm. Dazu gibt es bestimmte Strickmuster, die wir im Folgenden vorstellen wollen. Als Beispiel dazu entsteht ein Screenshot-Werkzeug, das es ermöglicht, den kompletten Bildschirminhalt oder Teile davon zu erfassen, als Grafik abzuspeichern oder an andere Programm durchzureichen.

Die Basis zu unserem kleinen Projekt liefert das Tool Import [1] aus der leistungsfähigen Kommandozeilen-Grafiksuite ImageMagick [2]. Ein Blick in die Import-Manpage verrät, was dieses Werkzeug alles kann: Es erfasst auf Wunsch ein einzelnes Fenster, den ganzen Desktop oder nur einen markierten Bereich. Die Grafiken legt es entweder in einer Datei ab oder gibt sie auf die Standardausgabe aus, von wo aus Sie die Daten bei Bedarf mithilfe einer Pipe an einen anderen Befehl weitergeben. Führen Sie den Befehl import abc.jpg auf der Kommandozeile aus, so verwandelt sich der Mauszeiger in ein Fadenkreuz, mit dem Sie dann die Auswahl treffen. Lassen Sie die Maustaste los, knipst das Tool den Screenshot und speichert ihn in der Datei namens abc.jpg ab.

TIPP

ImageMagick kann mit über 100 Grafikformaten umgehen. Verwenden Sie für den Dateinamen eine Endung wie tiff, gif oder png, dann wählt die Software automatisch das richtige Format.

Viele in Desktops integrierte Screenshot-Tools beherrschen nur wenige Formate, etwa JPG oder PNG. Einige erlauben zudem kein Erfassen eines definierten Bereichs, wie eines Bildausschnitts oder Fensters. Zudem fallen oft zwei bis drei Arbeitsschritte an, bis die gewünschte Datei als Grafik vorliegt. Dabei ließe sich alles in einem Rutsch erledigen: Einfach nur per Tastaturkürzel, Startmenü oder Symbol in der Task-Leiste das Tool starten, ein Fenster oder einen Bildausschnitt blitzschnell auswählen und dann gleich automatisiert abspeichern und eventuell an ein anderes Programm weiterreichen.

Im Eigenbau

Da mit Import ein sehr leistungsstarkes Kommandozeilentool für Screenshots bereitsteht, bietet es sich an, mit einem Shell-Skript die Lösung des Problems zu suchen (Listing 1). Dazu legen Sie sich am besten einen Ordner an, den Sie als Programm- oder Testordner benutzen.

Listing 1

#!/bin/bash
pfad=${HOME}/Programme/bildcutter
bilder=${HOME}/Bilder/Importe
declare -i nummer
nummer=$(cat ${pfad}/bildnummer)
import ${bilder}/${nummer}.jpg
let nummer++
echo $nummer > ${pfad}/bildnummer
@KE

Wie jedes ordentliche Skript beginnt diese Datei mit einer Zeile, die Auskunft über den zu verwendenden Interpreter gibt. Hinter dem Shebang (#!) steht der genaue Pfad zu diesem. Die Bash ist für solche Aufgaben immer eine gute Wahl. In den Zeilen 2 und 3 setzen Sie die Variablen für die verwendeten Pfade, unter anderem zu dem Ordner, in dem Sie Grafiken abspeichern wollen.

Um die automatische Vergabe eines Dateinamens zu ermöglichen, arbeiten Sie mit einer fortlaufenden Nummer, die Sie als Teil des Dateinamens verwenden. Die Anweisung in Zeile 4 legt eine Variable als Ganzzahl an, die Sie bei Bedarf hochzählen (Zeile 7). Während des weiteren Programmablaufs liest das Skript diese Zahl aus einer Datei aus (Zeile 5) oder schreibt die um den Wert Eins erhöhte Zahl wieder in diese hinein (Zeile 8).

Sie benötigen also für den ersten Start des Skripts eine Datei, in der eine Nummer steht. Statt umständlich einen Editor zu öffnen, erstellen Sie dieses File in einem Terminal mit dem Kommando: @LI: $ echo 1 > ${HOME}/Programme/bildcutter/bildnummer

In Zeile 5 lesen Sie diese Zahl mit einem einfachen Cat-Befehl aus. Da diese Anweisung in runden Klammern mit einem vorangestellten Dollar-Zeichen steht, führt die Bash das Kommando in einer Subshell aus und speichert die Ausgabe in der Variablen nummer ab. Nach dieser Operation erfolgt der eigentliche Import.

Statt eines Namens für die Bilddatei kombiniert das Skript den Pfad, den Sie in der Variablen bilder gespeichert haben, sowie die Nummer und ein angehängtes .jpg. Die geschweiften Klammern um die Namen der Variablen sorgen dafür, dass die Shell die darin abgespeicherten Werte einsetzt und so das Bild mit einer Nummer versehen im gewünschten Verzeichnis abspeichert. Durch den Befehl in Zeile 7 zählt das Skript die Variable nummer um eins hoch. Mittels eines einfachen Echo-Befehls in Zeile 8 schreibt es den neuen Wert in die Datei bildnummer.

Variationen

Sie dürfen auch andere Formate für das Bild verwenden, wenn Sie eine spezielle Aufgaben damit erledigen wollen. So könnten Sie etwa interessante Textpassagen ausschneiden und sie mittels Pipe an das Texterkennungsprogramm Ocrad [3] weitergeben, damit dieses dann die Bilddatei in eine Textdatei umwandelt. Dazu müssen Sie allerdings mit weniger bekannten Formaten wie PBM, PGM oder PPM arbeiten und das importierte Bild nicht abspeichern, sondern in die Standardausgabe schreiben.

Das Skript an sich lässt noch Komfort vermissen: Sie müssen es immer von der Kommandozeile aus aufrufen. Da bietet sich an, im Desktop ein Tastenkürzel zu erstellen, das einfach auf das Skript verweist (Abbildung 1). Gnome bietet diese Möglichkeit unter Systemeinstellungen | Tastatur | Tastenkürzel, bei KDE verwenden Sie Systemeinstellungen | Systemverwaltung | Tastenkombinationen. So gut wie alle grafischen Oberflächen bieten die Möglichkeit, solche Tastenkürzel anzulegen und zu konfigurieren.

Abbildung 1: Während Sie im Web surfen, sichern Sie per Druck auf einen Starter oder mithilfe eines Tastaturkürzels komfortabel einen Bildausschnitt.

Bei regelmäßiger Nutzung des kleinen Batch-Programms stellen Sie sicher schnell fest, dass es sich zwar fast wie ein vollwertiges Desktop-Tool verhält, aber trotzdem noch einige Kanten aufweist. Dann zahlt es sich aus, dass Sie die Möglichkeit haben, es unkompliziert nach Belieben zu erweitern.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare

Infos zur Publikation

title_2014_10

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...