ubuntuusers.de

ubuntuusers.deWikiTcl

Tcl

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte diesen Artikel testen und das getestet-Tag entsprechend anpassen.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Tcl ist eine um 1991 entwickelte Skriptsprache, bei der eine Grafikbibliothek enthalten ist. Daher ist die Bezeichnung meist Tcl/Tk. Tcl/Tk ist plattformunabhängig; es läuft unter Linux/Unix, Windows und Mac OS. Hinzu kommt, dass Anwendungen mittels sog. "Starkits" problemlos in "Executables" umgewandelt werden können, natürlich für jede Plattform separat und in vielen Fällen bleiben Executables unter 2 MB, ohne die Notwendigkeit einer installierten "Runtime" (wie bei Java oder .NET der Fall ist).

Tcl kann unter Unix/Linux problemlos als Ersatz für Bash-Skripte genutzt werden, die bei anspruchsvolleren Skripten schnell von awk etc. Gebrauch machen müssen. Wenn es darum geht, mit Hilfe von Tcl/Tk kleine graphische Anwendungen zu bauen, so ist festzustellen, dass die Kompaktheit des Code dazu verleitet, auch größere GUI-Projekte damit umzusetzen (nicht ideal) oder dass Leute, die nicht "hauptberuflich" Programmierer sind, Tcl/Tk-Programme erstellen. Im zweiten Fall leidet die Qualität des Code oft (im Sinne von Konsistenz, Lesbarkeit, Wiederverwendbarkeit, usw.).

Installation

Installation über die Paketquellen

Tcl/Tk kann über die Paketquellen durch Installation[1] des folgenden Pakete bezogen werden (hier der Vollständigkeit halber mit dem optionalen Paket Expect - am Ende des Artikels gibt es einen Hinweis dazu):

  • tcl8.5

  • tk8.5 (optional)

  • expect (optional)

Wiki/Vorlagen/Installbutton/button.png

Standardmäßig wird ohne Angabe der Versionsnummer V8.4 installiert. Beide Versionen sind ggf. parallel vorhanden. Allerdings wird die aktuellere Shell nur aktiviert, wenn tclsh8.5 eingegeben wird. Um dies zu ändern, muss ein symbolischer Link über das Terminal[2] angepasst werden (dies individuell prüfen, sehr wahrscheinlich geht es um /usr/bin/tcl-default):

sudo ln -fs tclsh8.5 /usr/bin/tclsh-default 

Es empfiehlt sich, ergänzend zur Installation das Paket

  • tclreadline (universe)

Wiki/Vorlagen/Installbutton/button.png

zu installieren. Dies bietet weitere Editiermöglichkeiten und eine Kommandohistorie in der tcl-Konsole (das standardmäßige Fehlen von readline-Support ist z.T. historisch und Lizenz bedingt - GPL vs. BSD). Nach der Installation von tclreadline muss die Datei .tclshrc im Home-Verzeichnis mit folgendem Inhalt erstellt werden[3]:

if {$tcl_interactive} {
    package require tclreadline
    ::tclreadline::Loop
}

Installation über Download

Alternativ kann das Paket von ActiveState {dl} {en} installiert werden. Bei diesem Paket sind Demos und viele weitere Bibliotheken vorhanden oder können über ein apt-get ähnliches Programm namens "teacup" nachgeladen werden. Hier ist auch die V8.6 downloadbar.

Nachdem man die neueste Version von Tcl herunterladen und entpackt[4] hat, führt man das Installationsskript aus:

cd ActiveTcl...
sudo ./install.sh 

Am Ende der Installation ist es empfehlenswert die Umgebungsvariable PATH um /opt/ActiveTcl-8.5/bin zu erweitern. Eine Anleitung hierfür ist im entsprechenden Artikel zu finden. Anschließend hat man direkten Zugriff auf eine GUI-basierende Konsole tkcon mit erweiterter Funktionalität (im Vergleich zu tclsh) und Manpages (z.B. man canvas).

Ein Alternative ist, Symlinks zu erstellen (oder überschreiben):

sudo ln -fs /opt/ActiveTcl-8.5/bin/tclsh8.5 /usr/bin/tclsh
sudo ln -fs /opt/ActiveTcl-8.5/bin/wish8.5 /usr/bin/wish 

Einige Beispiele der teacup-Nutzung:

sudo /opt/ActiveTcl-8.5/bin/teacup list
sudo /opt/ActiveTcl-8.5/bin/teacup install Expect 

Der letzte Befehl installiert das Paket Expect. Dieses erlaubt das einfache Erstellen von Skripten, die interaktiv kommunizieren können, z.B. Herstellung von Dial-up Verbindungen, automatische Logins via telnet, ssh, ...

Im Gegensatz zu dem Paket expect aus den Repositories fehlt dem Expect von ActiveState die Binary /usr/bin/expect. Stattdessen werden Skripte mit tclsh ausgeführt. Dazu muss vor jeglichem Expect-spezifischen Code die Zeile

package require Expect

eingefügt werden. Hier ein Beispielskript zum Aufbau einer telnet-Verbindung:

#!/usr/bin/tclsh

package require Expect
spawn telnet 192.168.0.1
expect "login:"
send "root\n"
....

Das ActiveTcl-Paket ist das Standardpaket für die Windows-Umgebung. Weiterhin gibt es all-in-one binaries bei http://www.evolane.com {en}, u.a. auch für Embedded-Plattformen.

Hinweis!

Fremdsoftware kann das System gefährden.

"Hello World" Programm erstellen

Wie in jeder Programmiersprache führt auch in Tcl der Weg zu einem fertigen Programm über die Eingabe des Quelltexts in einem Editor. Für das "Hello World" Programm öffnet man einen Editor[3] und speichert folgenden Quelltext in einem beliebigen Ordner (z.B. unter den Namen helloworld):

1
2
3
4
#!/bin/tclsh
# Mein erstes Tcl-Programm

puts "hello World!"

Aufruf, nachdem die Datei ausführbar gemacht wurde[4], durch

./helloworld 

oder in der tclsh:

% source helloworld 

helloworld.png Ein Beispiel für eine grafische Variante:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/wish
# Mein erstes Tcl/Tk-Programm mit Texteditor

button .b -text "hello World!" -font "Verdana 20"
text .t -bg wheat
# separater Schritt zum Sichtbarmachen (geometry manager)
pack .b .t

.t insert end "button drücken verändert Farben..."
bind .b <Button-1> {.b config -bg orange -activebackground yellow}

Der Aufruf des Programms geschieht auf die gleiche Weise wie zuvor. Das Programm kann auch über die Standard tclsh gestartet werden (siehe erste Zeile), aber dann muss das Tk-Package separat geladen werden, bevor erste Tk-Elemente kreiert werden:

1
package require Tk

In diesem Sinne können eine Vielzahl von Bibliotheken nachgeladen werden.

In der tclsh-Konsole kann interaktiv an der GUI gebastelt werden, z.B.

% .t config -width 40 

um die Breite des Texteditors zu halbieren.

Selbstverständlich bedarf es ein passendes Entwicklungsumfeld, wenn Programme während des "Laufens" optimiert und erweitert werden sollen, z.B. in Eclipse über ein DLTK-Plugin.

Sonstiges

Zusammen mit Tk bildet Tcl ein mächtiges Werkzeug zum Erstellen von GUI-Programmen in "Rapid Application Development" Manier, weil der Code unwahrscheinlich kompakt sein kann. Leider wirkt die Optik in *nix etwas betagt, im Vergleich zu Tk in Windows oder Mac. Im Rahmen von sog. "Themed Widgets" wird daran gearbeitet, dies abzustellen.

Befehle sehen so aus wie bei bash, mit dem Unterschied, dass Kommandoverschachtelung in Tcl über [...] erfolgt.

Ausführliche Informationen zum grafischen Programmieren mit dem Tk-Toolkit: TkDocs {en}.

Historisch gesehen ist eine der wichtigsten Bibliotheken für Tcl Expect, mit welcher z.B. automatisierte Remote-Logins durchgeführt werden können (unter Zuhilfenahme von z.B. telnet oder SSH). Es können auch Programme, die über die Kommandozeile gesteuert werden, vollautomatisch getestet werden. Expect öffnet dazu eine bidirektionale Pipeline, der keinerlei Blocking-Probleme ausgesetzt ist.

Diese Revision wurde am 11. April 2012 03:21 von Kuttel Daddeldu erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung, ungetestet

Passwort vergessen?