Folgendes hatte ich erst unter „Baustelle“ gepostet, aber da war es wohl falsch und wurde weggeputzt. Hier bin ich aber hoffentlich mit dem Thema richtig.
Mittlerweile habe ich eine Lösung. Hier aber der gesamte Weg dorthin:
Aufgabe: Ein Skript erstellen, das ich nur anzuklicken brauche, um aktualisierte Virendefinitionen für einen Windows-PC (der ohne Internet-Zugang ist) auf einen USB-Stick zu laden.
Folgendes habe ich ausprobiert:
#!/bin/bash rm -f ../Desktop/ivdf_fusebundle_nt_en.zip sleep 2 firefox http://dl.antivir.de/down/vdf/ivdf_fusebundle_nt_en.zip echo "Die Daten werden jetzt auf den Stick transportiert..." mv -f ../Desktop/ivdf_fusebundle_nt_en.zip /media/Cruzer echo "Der Cruzer muss eingesteckt sein und darf nicht (logisch) ausgehaengt sein." echo "Letzte Gelegenheit, ihn einzustecken!" echo "Die Uebertragung dauert erfahrungsgemaess ca 200 Sekunden. - Warte solange!" sleep 200 echo "Der Stick wird jetzt (logisch) ausgehaengt..." umount -l /media/Cruzer rm -f ../Desktop/ivdf_fusebundle_nt_en.zip echo "*********************************************" echo "Der USB Stick kann jetzt herausgezogem werden" echo "Firefox von Hand beenden" echo "*********************************************"
Mir ist klar: das ist blutige Anfänger-Skriptprogrammierung. Es ist auch das erste Skript unter Linux, das ich schreibe. Also bat ich um Verbesserungsvorschläge zu folgenden Problemen:
1. Ich verwendete Firefox, um die Virenschutzsignaturen herunterzuladen. Firefox ist aber eigentlich ein GUI-Programm, und so bleibt das GUI nach getaner Arbeit auf dem Bildschirm.
2. Ohne den Befehl sleep 200 funktionierte das nicht: da überholte das umount den Kopiervorgang (die Zeit habe ich praktisch ermittelt, aber das ist natürlich Mist, falls die Virenschutzsignaturen größer werden). Beim zweiten Punkt habe ich vielleicht ein grundsätzliches Mißverständnis: Ich las, daß man ein & hinter einen Befehl schreiben soll, wenn er im Hintergrund ablaufen soll. Das hat mein mv-Befehl aber nicht. Ich nahm also an, daß der nächste Befehl erst an die Reihe kommt, wenn mv ... abgeschlossen ist. Aber die Fehlermeldungen, die ich sah, zeigten mir, daß ich da etwas in den falschen Hals bekommen habe. Aber wie ist es richtig? Auch der Firefox läuft ja weiter, auch nachdem er die Daten abgeholt hat. Wenn ich den Firefox nun aus so einem Skript heraus wieder "abschießen" wollte, wie bekomme ich dazu dessen PID heraus?
3. In dem Buch von Kofler habe ich gelesen, daß die GUI-Programme "alle" im Prinzip auch per Kommandozeile bedienbar seien. Doch dazu müßte ich wissen, wie all die vielen Helferlein, die ich per Anwendungen > ... aktivieren kann, denn eigentlich genau heißen. Dann könnte ich mir mit truedel --help oder man truedel usw schon die Beschreibungen holen. Aber anders, als sonst überall, kann ich nicht an der Stelle, an der ich ein Programm aktiviere, mit einem Rechtsklick mir die "Eigenschaften" des Objekts ansehen: Wie also finde ich den Namen eines Programms mit GUI heraus?
Lösung (der Aufgabe, aber nicht aller Fragen, die sich am Rand dabei stellten):
#!/bin/bash rm -f ivdf_fusebundle_nt_en.zip echo "Der Cruzer muss eingesteckt sein und darf nicht logisch ausgehaengt sein." sleep 2 wget http://dl.antivir.de/down/vdf/ivdf_fusebundle_nt_en.zip echo "Die Daten werden jetzt auf den Stick transportiert..." mv ivdf_fusebundle_nt_en.zip /media/Cruzer echo "Die Uebertragung dauert erfahrungsgemaess eine Weile. - Warte solange!" sleep 2 echo "Der Stick wird jetzt (logisch) ausgehaengt..." umount -l /media/Cruzer rm -f ../Desktop/ivdf_fusebundle_nt_en.zip echo "*********************************************" echo "Der USB Stick kann jetzt herausgezogem werden" echo "*********************************************"
Der springende Punkt ist also, wget statt Firefox zu verwenden (darauf hat mich freundlicherweise mein Neffe gebracht). Es bleibt aber die Frage, weshalb vorher eigentlich die sleep-Befehle notwendig waren und der umount-Befehl den Firefox „überholen“ konnte.
Wenn ich hier in der richtigen Ecke für Skriptprogrammierung bin: über Kommentare zur handwerklichen Verbesserung meiner Lösung und Erläuterungen würde ich mich freuen und andere blutige Anfänger mit Skriptprogrammierung unter Ubuntu vielleicht auch.