[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Rechte: Rechte für Dateien und Ordner ändern] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] Die folgenden Skripte erlauben es, zum Ende eines bestimmten Zeitintervalls oder zu einer bestimmten Uhrzeit einen Befehl im Terminal ausführen zu lassen – solange der Benutzer, von dem das Skript ausgeführt wird, angemeldet ist. Als Anwendungsbeispiel wird das Abspielen von Multimediadateien mittels [:VLC:], [:MPlayer:] oder [:Totem:] aufgeführt. Man kopiert die Bash-Skripte mit einem Editor[2] in eine Datei, speichert sie danach und macht sie ausführbar[3]. Grafische Alternativen bieten folgende Programme: * [:Alarm_Clock:] * [launchpad:wakeup:Wakeup] {en} * [https://extensions.gnome.org/extension/53/pomodoro/ Pomodoro] {en} (GNOME 3) * [:KAlarm:] (KDE) * [:KTimer:] (KDE) = Ausführung nach Ablauf einer Zeitspanne = Es müssen die Stunden, Minuten und Sekunden nach deren Ablauf der Befehl ausgeführt werden soll, angegeben werden. == Skript == {{{#!code bash #!/bin/bash sleep $((3600*$1 + 60*$2 + $3)) # Hier den auszuführenden Befehl einfügen }}} == Benutzung == Grundsätzlich muss das Programm so im Terminal[1] aufgerufen werden: {{{#!vorlage befehl ./skriptname.sh }}} '''skriptname.sh''' steht für den gewählten Dateinamen. Das Ausführen via Nautilus funktioniert nicht, da die Zeitparameter angegeben werden müssen. * Für `` setzt man die Anzahl der Stunden ein. * Für `` setzt man die Anzahl der Minuten ein. * Für `` setzt man die Anzahl der Sekunden ein. == Anwendungsbeispiel mit VLC == Als Befehl wird folgendes in Zeile 3 eingefügt: {{{#!vorlage befehl vlc -f -R --no-osd $4 }}} Wer nicht möchte, dass das Video wiederholt wird, entfernt einfach den Parameter `-R`. Wer keinen Vollbild-Modus möchte oder Musik hört, kann den Parameter `-f` entfernen. Zum Aufrufen des Skriptes muss dann noch der Pfad zur Mediendatei, beziehungsweise die URL hinzugefügt werden: {{{#!vorlage befehl ./skriptname.sh }}} = Ausführung zu einer Uhrzeit = Diese Variante erlaubt es, eine Uhrzeit im Format `hhmm` einzugeben zu der der Befehl ausgeführt werden soll. == Skript == Dieses Skript ist auch aus dem Dateimanager mittels der Option ''Im Terminal ausführen'' ausführbar. Es arbeitet mit Eingabe der Uhrzeit durch den Benutzer direkt im Terminal. {{{#!code bash #!/bin/bash echo "Wann soll der Befehl ausgeführt werden? (hhmm)" read u while [ $(date +%H%M) -ne $u ]; do sleep 55 done # Hier den auszuführenden Befehl einfügen }}} Da dieses Skript, um CPU-Last zu sparen, nur alle 55 Sekunden die Uhrzeit überprüft, wird der Befehl nicht genau um hh:mm:00 ausgeführt, sondern bis zu 55 Sekunden später. == Anwendungsbeispiel mit MPlayer == Hier wird zusätzlich der Pfad zur Datei abgefragt. {{{#!code bash #!/bin/bash echo "Wann soll geweckt werden? (hhmm)" read u echo "Welche Datei? (Pfad zur Mediendatei kopieren und einfügen)" read p while [ $(date +%H%M) -ne $u ]; do sleep 55 done mplayer $p }}} = Flexible und genaue Ausführung nach Zeitspanne oder Uhrzeit = Das nachfolgende Skript eignet sich, um einen Befehl flexibel entweder zu einer bestimmten Uhrzeit oder nach einer Zeitspanne auszuführen. Dabei wird der Befehl `date` verwendet, um die eingegebene Zeit um zurechnen und als Befehl wird Totem gestartet. Die Zeit kann theoretisch bis auf die Nanosekunde genau festgelegt werden. Man führt das Skript so aus: {{{#!vorlage befehl ./wecker.sh }}} * '''wecker.sh''' muss durch den Namen des Skripts ausgetauscht werden. * `` kann durch die Zeitspanne oder Uhrzeit, zu bzw. nach der man geweckt werden möchte, ersetzt werden. Mögliche Eingaben sind: `HH:MM`, `HH:MM:SS`, `"YYYY-MM-DD HH:MM"`, `"tomorrow 11:00"`, `100sec`, `30min`, `20hours`, `"1hours 15min"`, ... * `` kann durch den Dateinamen der Multimediadatei ersetzt werden. Die Parameterangaben sind optional. Sie können auch im Programm selber angegeben werden. Enthalten die Parameter Leerzeichen, dann müssen sie in Anführungszeichen eingeschlossen werden. Es kann keine Datei ohne Zeitspanne eingegeben werden. == Skript == {{{#!code bash #!/bin/bash if [ "$1" ] then zeit="$1" else echo "Wann soll der Wecker klingeln?" read zeit fi if [ -f "$2" ] then dateiname="$2" else echo "Welche Datei soll abgespielt werden?" read dateiname fi jetzt=$(date +%s) # Zeit jetzt, in Sekunden seit 1970 spaeter=$(date -d "$zeit" +%s) # Zeit für die Ausführung des Befehls, in Sekunden seit 1970 spaeterlesbar=$(date -d "$zeit" +%Y-%m-%d-%H:%M:%S) # menschenlesbare Zeit für die Ausführung des Befehls sleepsekunden=$(($spaeter - $jetzt)) # Zeit in Sekunden für sleep echo "in $(($sleepsekunden / 60)) minuten um $spaeterlesbar wird der Befehl ausgeführt." # kleine Ausgabe um zu sehen, ob man alles richtig eingegeben hat sleep $sleepsekunden totem $dateiname # auszuführender Befehl }}} = Links = * [:at:] - zeitgesteuerte Ausführung von Kommandozeilenprogrammen * [:Skripte:] {Übersicht} Übersichtsartikel #tag: Programmierung, Shell