schrumpelhut
Anmeldungsdatum: 3. Januar 2014
Beiträge: 14
|
Hallo,
ich habe ein Skript zusammengestellt mit dem ich auf verschiedene Listen zurückgreife, die dann als Nachricht auf dem Desktop ausgegeben werden. Ich verwende dabei "einen" Icon der dem Text vorangestellt ist, würde aber gerne verschiedene Icons verwenden. In den Manpages wird mir angegeben, dass ich folgende Syntax verwenden soll –icon=ICON[,ICON...]. Mir fehlen grundlegende Kentnisse um das zu verstehen. Könnt Ihr mir bitte helfen, den Pfad anzugeben.
Ich verwende das originale Programm von notify-send und nicht notify-osd von ppa:leolik/leolik. Wen es interessiert: Es sind Listen mit Limericks, Sprichwörtern etc. und es soll durch verschiedene Icons ein bisschen bunter aussehen.
Danke
Stefan 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | #!/bin/bash
cd /home/stefan/Listen
# ins Zielverzeichnis wechseln
cd /home/stefan/Listen
# Laufvariable fuer Array initialisieren
LAUF=0
# Dateien aus Verzeichnis lesen und Liste aufbauen
for DATEI in *
do
LISTE[${LAUF}]="${DATEI}"
(( LAUF = ${LAUF} + 1 ))
done
# Dateiauswahl anbieten
AUSWAHL=$(zenity --list --width=600 --height=400 --title "Listen" --text "Bitte Dateien auswählen..." --print-column=1,2 --column "Datei" --multiple --separator=" " "${LISTE[@]}")
# Ergebis ausgeben, eventuell einen Programm uebergeben oder oder oder
# echo ${AUSWAHL}
while true
do rl -c1 $AUSWAHL | while read line
do notify-send -i /home/stefan/Vorlagen/amor.png "$line"
done
sleep 20
done
|
Bearbeitet von rklm: Passendes Syntaxhighlighting eingestellt. Bitte die Vorschaufunktion nutzen.
|
Dominik_Schuster
Anmeldungsdatum: 19. September 2013
Beiträge: 122
|
Hi, ein kleiner Tipp meinerseits. Schreibe eigene Variablen immer klein könnte, sonst zu Komplikationen mit Systemvariablen kommen ^^ Mfg, Dominik
|
schrumpelhut
(Themenstarter)
Anmeldungsdatum: 3. Januar 2014
Beiträge: 14
|
OK, das sollte man auf jeden Fall tun.
Gruß Stefan
|
g00d.morning
Anmeldungsdatum: 20. Februar 2013
Beiträge: 330
|
Hallo und willkommen schrumpelhut. Wo liegt denn genau Deine Schwierigkeit? Du kannst ja als Argument für -i eine Variable angeben. z.B. for icon in ~/Bilder/Bild\ 1.png ~/Bilder/Bild\ 2.png; do
notify-send -i "$icon" Überschrift Inhalt
done Du musst beim Quoten etwas aufpassen. Mehr gibt es eigentlich nicht zu beachten. Grüße
|
schrumpelhut
(Themenstarter)
Anmeldungsdatum: 3. Januar 2014
Beiträge: 14
|
Hallo und vielen Dank. Ich hatte nicht verstanden, dass –icon=ICON[,ICON...] mit einer Variablen zu Lösen ist. Die Kurzfassung funktioniert. Aus dem Ordner Vorlagen werden alle Icons nacheinander angezeigt. Beim Einbau in das Skript hängen noch die Kabel raus d.h. es blieb bei Versuchen.
Vielleicht schaffe ich morgen mehr.
Gruß #!/bin/bash
for icon in ~/Vorlagen/*
do notify-send -i "$icon" "Hallo" "klappt fast"
done
|
g00d.morning
Anmeldungsdatum: 20. Februar 2013
Beiträge: 330
|
schrumpelhut schrieb: Hallo und vielen Dank. Ich hatte nicht verstanden, dass –icon=ICON[,ICON...] mit einer Variablen zu Lösen ist.
Das ist ja gerade ein Paradebeispiel für die Shell. Ein Befehl fordert eine bestimmte Syntax und diese kann auch automatische generiert werden.
Die Kurzfassung funktioniert. Aus dem Ordner Vorlagen werden alle Icons nacheinander angezeigt. Beim Einbau in das Skript hängen noch die Kabel raus d.h. es blieb bei Versuchen.
Vielleicht schaffe ich morgen mehr.
Falls Du nicht weiter kommst, nimm die Poetik aus dem Satz und beschreibe nüchtern woran es hapert, dann kann Dir bestimmt geholfen werden. 😉 Viel Erfolg!
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
schrumpelhut schrieb: Hallo,
ich habe ein Skript zusammengestellt mit dem ich auf verschiedene Listen zurückgreife, die dann als Nachricht auf dem Desktop ausgegeben werden. Ich verwende dabei "einen" Icon der dem Text vorangestellt ist, würde aber gerne verschiedene Icons verwenden. In den Manpages wird mir angegeben, dass ich folgende Syntax verwenden soll –icon=ICON[,ICON...]. Mir fehlen grundlegende Kentnisse um das zu verstehen. Könnt Ihr mir bitte helfen, den Pfad anzugeben.
Ich verwende das originale Programm von notify-send und nicht notify-osd von ppa:leolik/leolik. Wen es interessiert: Es sind Listen mit Limericks, Sprichwörtern etc. und es soll durch verschiedene Icons ein bisschen bunter aussehen.
Ich habe da noch ein paar Anmerkungen:
Zeile 2 ist doppelt. Zeilen 7 bis 12 sind überflüssig, weil Du die Variablen LISTE und LAUF nirgendwo anders verwendest als in Zeile 18. Du kannst den Stern direkt in Zeile 18 benutzen. Auf die Benennung der Shell-Variablen hatte Dominik ja schon hingewiesen. Wenn Du Schleifenrümpfe einrückst, wird es lesbarer. Was ist rl für ein Kommando? Ich kann das nicht als Shell-Befehl oder als Kommando via apt-file finden. Du solltest AUSWAHL quoten, weil ein Dateiname mit Sonderzeichen sonst Dein Skript scheitern lässt.
Wenn man das anwendet, kommt das dabei heraus: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #!/bin/bash
# ins Zielverzeichnis wechseln
cd /home/stefan/Listen || exit
# Dateiauswahl anbieten
auswahl=$(zenity --list --width=600 --height=400 --title "Listen" --text "Bitte Dateien auswählen..." --print-column=1,2 --column "Datei" --multiple --separator=" " *)
# Ergebis ausgeben, eventuell einen Programm uebergeben oder oder oder
# echo "$auswahl"
while true; do
rl -c1 "$auswahl" | while read line; do
notify-send -i /home/stefan/Vorlagen/amor.png "$line"
done
sleep 20
done
|
Ciao robert
|
schrumpelhut
(Themenstarter)
Anmeldungsdatum: 3. Januar 2014
Beiträge: 14
|
Hi und Danke für die Anregungen.
notify-send soll aus verschiedenen Listen, Textzeilen in zeitlichem Abstand anzeigen. Das Bild links davon soll auch wechseln.
Das Anfangsskript arbeitet korrekt aber ohne den Wechsel von Bildern. Das Skript vom 27.10. funktioniert mit wechselnden Bildern (ohne Zufallsoperator) aber mit gleichem Text.
Diese beiden Skripte sollen miteinander verknüpft werden.
rl heißt "randomize lines" und ist über apt installierbar (http://manpages.ubuntu.com/manpages/karmic/man1/rl.1.html). Ein anderer Zufallsoperator wäre für die Bilder denkbar z.B. qiv habe ich versucht aber nicht integriert bekommen.
Wo kann ich die for-Schleife einfügen? "Zeilen 7 bis 12 sind überflüssig". Kam mir auch so vor, aber mit Roberts Skript sucht rl nach der Datei oder der Zeile: rl: error opening Sprichwörter Sprichwörter: No such file or dir. Vielleicht fällt Euch etwas ein.
Grüße Stefan
|
schrumpelhut
(Themenstarter)
Anmeldungsdatum: 3. Januar 2014
Beiträge: 14
|
Hallo,Ihr seid Spitze. Icons wiederholen sich aus noch unbekanntem Grund zwar einmal aber sonst alles ok. Könnte rl der Grund sein. Mal sehen.
Gruß Stefan
#!/bin/bash
cd ~/Listen || exit
auswahl=$(zenity --list --width=600 --height=400 --title "Listen" --text "Bitte Dateien auswählen..." --column "Datei" --separator=" " *)
for icon in ~/Vorlagen/*; do
rl -c1 $auswahl | while read line; do
notify-send -i "$icon" "$line"
done
sleep 20
done
|
g00d.morning
Anmeldungsdatum: 20. Februar 2013
Beiträge: 330
|
Hallo. Aktuell gehst Du alle Icons durch und für jedes Icon wird die ausgewählte Liste geöffnet und dort eine zufällige Zeile angezeigt (wenn ich das richtig überblicke). Aber soll nicht eher für jede Zeile ein zufälliges Icon ausgewählt werden? In diesem Fall musst Du Deine Scheifen anders herum aufbauen. Kannst Du Deine gewünschte Verkettung vielleicht mal näher beschreiben? Also im Sinne von: Von 10 Dateien wird per Zenity eine ausgewählt, aus dieser Datei soll eine Zeile zufällig ausgewählt werden... Mir jedenfalls ist noch nicht so klar, wie das gewünschte Ergebnis konkret aussehen soll.
|
schrumpelhut
(Themenstarter)
Anmeldungsdatum: 3. Januar 2014
Beiträge: 14
|
Hallo g00d.morning, danke, dass Du noch einmal nachfragst. Zenity greift auf den Ordner "Listen" zu. Dieser Ordner enthält vier Dateien mit jeweils vielen verschiedenen Zeilen in Anführungsstrichen. Randomize lines weiß durch die Variable, welche Datei ich ausgewählt habe und greift durch "while read line" auf eine Zeile dieser Datei zu. Notify-send zeigt sie im Benachrichtigungsfeld an. Notify-send soll für jede "Zeile" eine anderes Bild anzeigen. Diese Bilder liegen in einem anderen Ordner "Vorlagen". Eine einfache Überlegung wäre eine weitere Variable für die Bilder anzugeben und rl auch auf diese zugreifen zu lassen bspw. so wie auswahl=$zenity..... eben icon=$~/Vorlagen/* aber so geht es nicht. Und wie sieht die Syntax bei rl aus. Ich kann wahrscheinlich nicht die Variable mit einem Leerzeichen getrennt hinten anhängen. Außerdem muss "while read" auch eine Spezifikation haben, weil es ja ein Bild (.png) ist und keine Zeile. Die Beispiele bei rl im Internet habe ich nicht ganz verstanden. Lauter Fragen. Ich habe es ein Bisschen aufgegeben. Ursprüngliches Ziel meiner Unternehmung war es, zu lange Sessions vor dem Computer zu verkürzen und mich daran zu erinnern, dass man sich noch mit einer Menge anderer Dinge im Leben beschäftigen kann, also vielleicht ein Anfang, um nicht abhängig zu werden. Ich habe dann ein anderes Skript verfasst, mit dem ich meine Session zeitlich begrenze. Es kommen nach einer bestimmten Zeit einige Warnungen in Bildschirmgröße (qiv) und anschließend fährt der Computer ohne zu fragen in den Standby. Und nun kann man ja ein Buch z.B. über die Shell-Programmierung lesen 😉.
Zu diesem neuen Skript habe ich keine Fragen. Viele Grüße Stefan
|
g00d.morning
Anmeldungsdatum: 20. Februar 2013
Beiträge: 330
|
Hallo Schrumpelhut, falls Du noch Interesse hast, habe ich Dir mal ein mögliches Beispiel erstellt. (Das sollte mit Deinen Pfaden so hinkommen, überprüfe es aber nochmal) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/bin/bash
IFS=$'\n'
# Internal Field Separator nur auf Zeilenumbrüche beschränken (keine Leerzeichen oder Tabs)
icons=( $(for i in ~/Listen/*; do echo $i; done) )
# Alle Bilder in einem Array speichern
r=$((RANDOM % ${#icons[@]}))
# eine zufällige Zahl zwischen 0 und der Anzahl der Bilder erstellen
icon=${icons[r]}
# Das das Bild, das der zufälligen Zahl zugeordet ist auswählen und in der Variable "icon" speichern (dient nur der Übersicht, man kann es natürlich direkt unten einsetzen, also "${icons[r]}" statt "$icon" bei notify-send)
auswahl=$(while read line; do echo "$line"; done < \
"$(zenity --list --width=600 --height=400 --title "Listen" --text "Bitte Dateien auswählen..." --column "Datei" --separator=" " ~/Listen/*)" |\
sort -R | head -n1) # <-- Alternative zu rl (das ich nicht kenne)
notify-send -i "$icon" "Überschrift" "$auswahl"
# ...und ausspucken :)
|
Grüße PS: Mit Zenity kenne ich mich als KDE'ler nicht so aus. Ich habe einfach mal Deine Zeile übernommen.
|