ubuntuusers.de

kleines bash script funktioniert nicht

Status: Gelöst | Ubuntu-Version: Lubuntu 16.04 (Xenial Xerus)
Antworten |

marsei85

Anmeldungsdatum:
3. November 2015

Beiträge: 148

Hallo,

ich möchte ein kleines Script schreiben, das mit einem Parameter gestartet wird. In dem Script wird dann abgefragt ob eine Aktion ausgeführt werde soll, wenn man mit j bestätigt dann soll das ein Programm mit dem Parameter starten, leider funktioniert es nicht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

DISPLAY=:0 xterm -e 'read -p "Programm starten (j/*)?" answer' 

if [[ $answer  == "j" ]]
	then         
 		DISPLAY=:0 /usr/bin/opera $1
         else
		exit 0
fi

das Script beendet ohne Rückmeldung, egal was ich eingebe...

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Wie startest Du das Skript ?

Denn Du startest ja ein neues, zusätzliches Terminal für die Abfrage - das ist für mein Empfinden ungewöhnlich.

track

marsei85

(Themenstarter)

Anmeldungsdatum:
3. November 2015

Beiträge: 148

Das mache ich weil das Programm aus dem cron dienst starten soll

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

In welcher Umgebung läuft Dein cron denn ? - denn damit Du grafische Programme starten kannst, muss natürlich die grafische Oberfläche (der X11-Server) vorher bereits laufen !

Ist das gegeben ?

track

marsei85

(Themenstarter)

Anmeldungsdatum:
3. November 2015

Beiträge: 148

ich habe das script unter lubuntu getestet

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

marsei85 schrieb:

Das mache ich weil das Programm aus dem cron dienst starten soll

Das ist generell nicht so eine gute Idee. cron wird das Skript nämlich unabhängig davon ausführen, ob eine User-Session besteht oder nicht. Es ist auch etwas fummelig die X11-Session-Authentifizierung in den Cron-Job zu bekommen.

Warum willst Du überhaupt einen regelmäßigen Job haben, der fragt, ob opera gestartet werden soll? Wenn Du das ein Mal gestartet hast, sind doch alle weiteren Nachfragen überflüssig. Sonst stapeln die sich auf Deinem Bildschirm.

Was willst Du eigentlich erreichen?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

marsei85 schrieb:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

DISPLAY=:0 xterm -e 'read -p "Programm starten (j/*)?" answer' 

if [[ $answer  == "j" ]]
	then         
 		DISPLAY=:0 /usr/bin/opera $1
         else
		exit 0
fi

das Script beendet ohne Rückmeldung, egal was ich eingebe.

In Zeile 3 wird die Variable answer innerhalb des Programms xterm gesetzt, welches in dieser Zeile aber auch schon wieder beendet wird. Die answer in Zeile 5 ist daher eine neue Variable.

Wenn, dann kann es allenfalls so gehen:

1
2
3
4
5
6
7
8
#!/bin/bash

DISPLAY=:0 xterm -e 'read -p "Programm starten (j/*)?" answer 

if [[ $answer  == "j" ]]
	then         
 	DISPLAY=:0 /usr/bin/opera $1
fi'

Den else-Teil schreiben wir nicht hin, weil da nichts passiert, was wir brauchen. Wo kommt das $1 hinter opera her - übergibt cron da etwas?

Wenn ich schon grafisch arbeite, dann würde ich die Tastaturabfrage gleich grafisch machen mit zenity oder xdialog oder etwas derartigem.

Mich würde auch interessieren, wozu das gut sein soll, zeitgesteuert ein Programm zu starten, aber nur nach Zustimmung, dann auch noch den Browser. Aber bitte - manchmal sind kuriose Basteleien der einzige oder einfachste Weg, ein Problem anzugehen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

user_unknown schrieb:

Wenn, dann kann es allenfalls so gehen:

Das reicht noch nicht wg. xauth. Wenn man generell DISPLAY bei allen Kindern braucht (wofür einiges spricht), wäre es auch einfacher oben diese Zeile einzufügen:

1
export DISPLAY=:0

bzw. für die sh

1
2
export DISPLAY
DISPLAY=:0

marsei85

(Themenstarter)

Anmeldungsdatum:
3. November 2015

Beiträge: 148

ich will mehrere Einträge im Cron Dienst machen, nach bestätigung einen Livestream zu bestimmten Uhrzeiten starten, also nicht alle 5 Minuten, sondern 2 mal in der Woche ☺

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

marsei85 schrieb:

ich will mehrere Einträge im Cron Dienst machen, nach bestätigung einen Livestream zu bestimmten Uhrzeiten starten, also nicht alle 5 Minuten, sondern 2 mal in der Woche ☺

Dann ist es vielleicht einfacher, ein Skript zu schreiben, das Du in Autostart konfigurierst und das zu den entsprechenden Zeiten den Prompt zeigt und dann das Programm startet.

marsei85

(Themenstarter)

Anmeldungsdatum:
3. November 2015

Beiträge: 148

Alles klar, dann mache ich das so, danke!

Antworten |