Spielereien mit CoSHy

Connects integrierte Shell »CoSHy« ist ein oft unterschätztes Schmankerl dieses Terminalprogramms.

Connects Scriptsprache ist ursprünglich für die Programmierung von DFÜ-Anwendungen gedacht, wie man das von einer Terminalscriptsprache auch erwarten sollte. Durch die Anlehnung an die Sprache von UNIX-Shells kann die »CoSHy« jedoch auch zu vielen anderen Zwecken »mißbraucht« werden.

Für die nachfolgenden Beispiele für kleine CoSHy-Anwendungen sind teilweise einige externe Tools notwendig, die den neueren MiNT-Paketen beiliegen. Aufgrund eines Programmfehlers in Connect können die Versionen 1.95 und 1.96 Schleifen nicht im interaktiven Modus der CoSHy verarbeiten. In den sog. Scriptfiles arbeiten sie jedoch korrekt. Gehen wir in medias res. Zu Beginn des kleinen Exkurses lassen Sie CoSHy zuerst einmal zählen. Tippen Sie folgendes ein:

a=1
while [ $a -1e 10 ]; do 
    echo $a 
    a=$[ Sa + 1 ] 
done

Die erste Zeile setzt die Variable a auf den Wert 1. Die zweite leitet eine Schleife ein, die durchlaufen wird, solange der Wert der Variablen a kleiner gleich (less or equal) 10 ist. Die 3. Zeile gibt nun den Wert von a aus. Danach wird a um 1 erhöht und in der letzten Zeile wird das Schleifenende angezeigt. Achtung: Die Leerzeichen in diesem Beispiel sind z. T. notwendig.

Als nächstes sollen die Fileutilitys von MiNT für CoSHy verfügbar gemacht werden. Insbesondere brauchen Sie die Programme basename.ttp, grep.ttp, cp.ttp, rm.ttp, mv.ttp, ls.ttp. Dazu legen Sie vom Desktop aus ein Verzeichnis C:\BIN an, in das diese Programme kopiert werden müssen. Danach muß die Datei CO-SHY.RC (das Startupfile von CoSHy) editiert werden. Es sollte für die angestrebten Zwecke zunächst nur aus der Zeile

PATH="c:/bin" 

bestehen.

Mit dieser Definition erhält die CoSHy einen Suchpfad für ausführbare Programme. Das heißt, wenn Sie in einem beliebigen Verzeichnis »ls« eingeben, wird das Programm C:\BIN\ LS.TTP automatisch gestartet.

Nehmen wir als Beispiel an, Sie haben sich durch ein cd d:/texte in den Ordner »Texte« gestellt, der eine schier unüberschaubare Anzahl von Texten enthält, deren Inhalt noch unüberschaubarer ist. CoSHy kann nun als Filter eingesetzt werden um alle Texte an Cornelia in den Ordner C:\TEXTE\CORNELIA zu schieben und dort auch gleich eine Sicherungskopie von diesen Dokumenten anzulegen. Folgendes Script erledigt diese Aufgabe:

for a in ^.txt; do 
    if grep -s "Liebe Cornelia," 
$a; then
    bak=$(basename $a .txt).bak 
    mv $a cornelia/$a 
    cp cornelia/$a 
cornelia/$bak 
fi 
done

In der ersten Zeile wird hier ein anderer Schleifentyp als oben gestartet: Eine for-Schleife. Sie weist der Variablen a nacheinander die Namen aller *.TXT-Dateien im momentanen Verzeichnis zu und führt jeweils die gesamte Schleife (bis zum done) aus.

Die zweite Zeile führt das Kommando grep -s "Liebe Cornelia," Sa aus und prüft dabei, ob die Zeichenkette »Liebe Cornelia,« in der jeweiligen Datei vorkommt. Wenn das der Fall ist, wird der Variablen bak das Ergebnis von $(basename Sa .txt).bak zugewiesen. Kommen Sie noch mit?

Hier passiert folgendes: Das Programm basename.ttp wird mit der jeweiligen .TXT-Datei aufgerufen. Basename.ttp gibt daraufhin den Dateinamen ohne die TXT-Extension aus. Am besten verdeutlichen Sie sich das mit den folgenden Beispielen:

basename otto.txt .txt 

erzeugt

otto
basename connect.prg .prg 

erzeugt connect

Das brächte an sich noch nicht viel. Die Konstruktion $() nimmt nun die Ausgabe von basename und setzt sie anstelle von $(...) in die eingegebene Zeile ein.

bak=$(basename rechnung.txt .txt).bak 

wird demnach ersetzt durch bak=rechnung.bak und das ist der ganze Trick. Nach dieser Ersetzung wird die ursprüngliche Datei in das Verzeichnis CORNELIA geschoben und danach die gewünschte Sicherheitskopie angelegt.

Mal ehrlich: Gibt es ein GEM-Programm, das unsere Aufgabe hätte komplett erfüllen können? Manche Jobs lassen sich einfach nur über eine Shell wie die CoSHy lösen. Natürlich ist die Einarbeitungszeit in die Sprache recht hoch, sie zu erlernen zahlt sich aber im Hinblick auf MiNT mit seinen vielen komfortablen Shells und deren Möglichkeiten sicher aus. Das hervorragende Handbuch zu Connect leitet in die Script-Sprache ein. Um sie letztlich richtig zu beherrschen, ist weiterführende Literatur aus dem UNIX-Sektor jedoch unumgänglich.

Zum Abschluß dieses Exkurses noch eine sehr ausbaufähige Funktion, die hier eher einen Spaß darstellt. Was passiert wohl, wenn die folgenden Zeilen eingegeben werden?

function fun { 
for file in *; do 
    if [ -d $file ] ; then 
        echo "$1-$file:" 
        cd $file 
        fun "$1 "
        cd .. 
    else
        echo "$1-Sfile” 
fi
done
}
fun

Raten Sie nicht, probieren Sie es aus! thl

Connect finden Sie in nahezu allen Mailboxen des MausNets (beispielsweise in der Maus Ludwigshafen). Gleiches gilt für das MiNT-Paket.

Den Autor von Connect, Wolfgang Wander, erreichen Sie auf elektronischem Wege unter Wolfgang Wander @ HH2 im Maus-Net bzw. Wolfgang_Wander@hh2.maus.de von »außerhalb« oder Wolfgang Wander, Rudolf-Breitscheid-Straße 63 a, 2000 Wedel


Michael Vondung
Links

Copyright-Bestimmungen: siehe Über diese Seite