Gambas: Shell
Zurück zu Gambas
Man kann die Linux Shell von Gambas aus ansprechen und nutzen. Wie das geht zeigen die folgenden Beispiele:
Ls unter Gambas
BearbeitenDas folgende Beispielprogramm zeigt, wie man sich die Dateien eines Verzeichnisses der Festplatte in einer Textarea anschauen kann.
Man braucht eine Textarea und einen Befehlsbutton, um das Programm in gang zu bringen.
' Gambas class file PUBLIC Content AS String 'Get the content of a directory PUBLIC SUB Button1_Click() SHELL "ls -la > /tmp/result" WAIT Content = File.Load("/tmp/result") Textarea1.text = content END
Man kann den String mit dem Namen Content aus dem Programm entfernen, wenn man die Textarea direkt mit dem Fileload füllt.
Textarea1.text = File.Load("/tmp/result")
Noch ein Beispiel: Unterverzeichnisse anschauen
BearbeitenMan braucht eine Textarea und 2 Befehlsbuttons, um das Programm in Gang zu bringen.
PUBLIC SUB Form_Open() ME.Text = "Unterverzeichnisse anzeigen - Wählen Sie einen Pfad" ME.X = 200 ME.Y = 50 ME.Width = 1200 ME.Height = 600 Button1.Text = "Unterverzeichnisse anzeigen" Button1.X = 16 Button1.Y = 16 Button1.Width = 300 textarea1.Text = "" textarea1.x = 16 textarea1.y = 56 textarea1.width = 700 textarea1.height = 500 Button2.Text = "Ende" Button2.X = 340 END PUBLIC SUB Button1_Click() DIM t AS String IF Dialog.SelectDirectory() THEN RETURN t = Dialog.Path SHELL "ls -ld " & t & "*/. > /tmp/result" WAIT Textarea1.text = File.Load("/tmp/result") END PUBLIC SUB Button2_Click() ME.Close END
Im ersten Unterprogramm Form_Open werden nur einige Einstellungen für die 3 Steuerelemente vorgenommen. Im 2, Unterprogramm Button1_Click steht der eigentlich wichtige Code: Zunächst wird ein string t deklariert. Dann wird eine Dialogform zur Auswahl des Verzeichnisses geöffnet. Das ausgewählte Verzeichnis (Dialog.path) wird dem String t übergeben. Mit dem Shell Befehl werden alle Unterverzeichnisse von Dialogpath in eine temporäre Datei gespeichert. Diese Datei wird geladen und in der Textarea angezeigt.
wc = wordcount unter Gambas
BearbeitenIm folgenden Programm wird der Linuxbefehl wc , der die Zeilen, die Worte und die Zeichen eines beliebigen Textes zählt, innerhalb eines Gambasprogrammes genutzt.
Um das Programm in Gang zu bringen braucht man:
- 2 Befehlsbuttons
- 1 Textarea ( Hier wird der zu untersuchende Text eingegeben)
- 1 Textbox ( Hier wird das Ergebnis des wordcount ausgegeben)
Der Code dazu:
PUBLIC t AS String PUBLIC SUB Form_Open() Textarea1.Text = "Dies ist ein Test" Textbox1.Text = "" END PUBLIC SUB Button1_Click() File.Save(system.Home & "/test.txt",TextArea1.Text) CATCH IF ERROR THEN RETURN END PUBLIC SUB Button2_Click() SHELL "wc " & system.Home & "/test.txt > /tmp/result" WAIT t = File.Load("/tmp/result") textbox1.Text = t END
- Mit dem Befehl 1 wird der Inhalt der Textarea in einer Datei test.txt abgespeichert.
- Mit dem Befehl 2 wird diese Datei test.txt einem wordcount unterzogen. das Ergebnis in der Datei /tmp/result abgespeichert.
- Diese Datei wird dann wieder in die Textbox geladen und angezeigt.
Etwas umständlich aber es geht. Der String t ist eigentlich überflüssig und kann aus dem Programm entfernt werden wenn man
textbox1.Text = File.Load("/tmp/result")
schreibt.
cp = Kopieren unter Gambas
BearbeitenBeispiel 1: Eine Datei kopieren
Sie benötigen auf ihrer Form:
- 2 Dirviews
- 2 Fileviews
- 1 Button
Public Sub Button1_Click() Dim sFile As String Dim sStr,sStr2 As String sStr = DirView1.Current & "/" sStr2 = DirView2.Current (sStr2= Dirview2,Current & "/") sFile = sStr & FileView1.Current Exec ["cp", "-v", sFile, sStr2] Wait DirView1.Reload DirView2.Reload End
Der Slash in (sStr2) würde bewirken, das zusätzlich ein Verzeichnis angelegt wird.
Wählen sie in Dirview2 ein Verzeichnis aus und in Fileview1 eine Datei, klicken sie auf Button1.
Nachdem Reload der Dirviews sehen sie die kopierte Datei im Verzeichnis von Dirview2.
Beispiel 2: Ein Verzeichnis kopieren
Public Sub Button1_Click() Dim sFile As String Dim sStr,sStr2 As String sStr = DirView1.Current & "/" sStr2 = DirView2.Current For Each sFile In Dir(DirView1.Current) sFile = sStr & sFile Exec ["cp", "-v", sFile, sStr2] Wait Next DirView1.Reload DirView2.Reload End
Sie können den EXEC-Befehl durch den SHELL-Befehl ersetzen:
Shell "cp -v " & sFile & " " & sStr2 Wait
rm = Löschen unter Gambas
BearbeitenBeispiel 1: Löschen einer Datei mit Nachfrage
Sie benötigen auf ihrer Form:
- Dirview
- Fileview
- Button
Public Sub Button1_Click() Select Message.Question("Datei löschen?", "Ja", "Nein") Case 1 Exec ["rm", "-r", DirView1.Current & "/" & FileView1.Current] Wait FileView1.Reload Case 2 Return End Select End
Beispiel 2: Löschen eines Ordners mit Nachfrage
Public Sub Button1_Click() Select Message.Question("Ordner löschen?", "Ja", "Nein") Case 1 Exec ["rm", "-r", DirView1.Current] Wait DirView1.Reload Case 2 Return End Select End
Sie können den EXEC-Befehl durch den SHELL-Befehl ersetzen. Voher muß die Datei oder das Verzeichnis mit einem String deklariert werden.
Besonderheit mit rm und dem SHELL-Befehl:
Eine Datei zb Meine Audio.datei wird rm nicht löschen, da rm diese Datei als zwei Dateien betrachtet. Die Datei müsste MeineAudio.datei heissen. Dies gilt nur mit dem SHELL-Befehl. Mit EXEC wird rm auch Meine Audio.datei löschen.
Dim sStr As String sStr=Dirview1.Current & "/" & Fileview1.Current (Datei) sStr=Dirview1.Current (Verzeichnis) Shell "rm -r " & sStr Wait
mv = Verschieben unter Gambas
Bearbeiten- 2 Dirviews
- 2 Fileviews
- 1 Button
Verschieben einer Datei mit mv
Public Sub Button1_Click() Dim sFile As String Dim sStr As String Dim sStr2 As String sStr = DirView1.Current & "/" sStr2 = DirView2.Current & "/" sFile = sStr & FileView1.Current Shell "mv -i " & sFile & " " & sStr2 Wait DirView2.Reload DirView1.Reload End