• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Wo liegt mein Denkfehler?

Hallo Leute

Ich habe hier ein experimentelles nicht ganz so ernst gemeintes Script, aus Langeweile und zum Üben gebastelt.
Code:
#!/bin/bash

#set -x
#Beschreibung:
#Besucht automatisch Seiten von auf
# http://www.lastfm.de/group/Linux+Germany/members gefundenen Usern 



dog --links http://www.lastfm.de/group/Linux+Germany/members | sort -u |\
grep 'http://www.lastfm.de/group/Linux+Germany/user/' | sed 's/group\/Linux+Germany\///g' |\
while read besuch
do 
	echo "${besuch}"
	konqueror ${besuch} &
	sleep 30 
	kill `ps -f | grep konqueror | grep -v grep | awk '{print $2}'`
done
#set +x

Und jetzt wollte ich an der Ausgabe bisschen basteln.
Nun ist da so eine störende Meldung von kill mit dabei:
./AutoBesuch_lastfm.sh: line 17: 11063 Beendet konqueror ${besuch}

Und nun rätsle ich vergeblich warum ich diese Meldung nicht aus der Ausgabe rausbringe. lässt sich weder uber stderr noch über stdout nach /dev/null schicken.

Wo liegt mein Denkfehler?
Warum kriege ich diese Überflüssige Ausgabe nicht los?

Gruß Peter
 
trommelpeter schrieb:
while read besuch
do
echo "${besuch}"
konqueror ${besuch} &
sleep 30
kill `ps -f | grep konqueror | grep -v grep | awk '{print $2}'`
done 2>/dev/null

Hab's nicht ausprobiert, aber könnte der "while ..." Loop umgeleitet werden müssen ?
Die Meldung kommt von der Shell die konqueror startet nicht von konqueror selbst.

Haveaniceday
 
OP
T

trommelpeter

Member
Hab's nicht ausprobiert, aber könnte der "while ..." Loop umgeleitet werden müssen ?
Die Meldung kommt von der Shell die konqueror startet nicht von konqueror selbst.

Tatsächlich. Deine Variante funktioniert. Mal wieder dazugelernt.
Warum mein ganzes gegreppe nichts genutzt hat werde ich noch bisschen analysieren müssen.

Gruß Peter
 

regexer

Advanced Hacker
qor schrieb:
Code:
pkill konqueror
Das hätte aber den Nachteil, dass der alle konqueror-Prozesse killt - also eventuell auch irgendwelche aus einer anderen Shell.

Deswegen war ich der Meinung: Besser $! nehmen.
 

qor

Newbie
Hiho,
notoxp schrieb:
Das hätte aber den Nachteil, dass der alle konqueror-Prozesse killt - also eventuell auch irgendwelche aus einer anderen Shell.
für sowas haben pkill bzw. pgrep die -n und -P Optionen.

Mit freundlichem Gruß.
 
OP
T

trommelpeter

Member
Hallo

Erstmal danke für die Anregungen.
Meine Variante habe ich ja gerade deshalb gewählt , weil genau die PID ermittelt werden soll mit welcher der konqueror in genau dieser einen Shell läuft.
Und genau nur diese eine PID wird gekillt. Die Anderen konquerors , die in anderen Shells gestartet werden bleiben bei meiner Variante unberührt.
Mein Problem bestand in der Meldung die ich nicht wegbrachte, weil ich nicht gleich erkannt habe das sie von der Shell ausgegeben wurde.
Aber seitdem ich die while-Schleife nach /dev/null leite ist das Problem gelöst.

Gruß Peter
 

qor

Newbie
Hiho,

trommelpeter schrieb:
Meine Variante habe ich ja gerade deshalb gewählt , weil genau die PID ermittelt werden soll mit welcher der konqueror in genau dieser einen Shell läuft.
Und genau nur diese eine PID wird gekillt. Die Anderen konquerors , die in anderen Shells gestartet werden bleiben bei meiner Variante unberührt.

genau das meinte ich doch mit z. B. der -P Option. Hier ein Beispiel:
Code:
qor@wave:~> pgrep konqueror
24121
24667
qor@wave:~> konqueror&
[1] 27478
qor@wave:~> pgrep konqueror
24121
24667
27478
qor@wave:~> pgrep konqueror -P $$
27478
qor@wave:~> pkill konqueror -P $$
qor@wave:~> pgrep konqueror
24121
24667
[1]+  Terminated              konqueror

Mit freundlichem Gruß.
 
OP
T

trommelpeter

Member
Hallo qor

Jetzt kapiere ich endlich das Prinzip. Ich dachte zunächst, was das wieder für ein exotisches Programm ist.

Danke für die Erklärung.

Gruß Peter
 

regexer

Advanced Hacker
trommelpeter schrieb:
Meine Variante habe ich ja gerade deshalb gewählt , weil genau die PID ermittelt werden soll mit welcher der konqueror in genau dieser einen Shell läuft.
Und das gleiche nochmals mit $!:
Code:
prompt> pgrep konqueror
8412
8421
prompt> konqueror &
[1] 8427
prompt> kill $!
[1]+  Terminated
prompt> pgrep konqueror
8412
8421
prompt>

Oder für deinen Fall kurz und knapp:
Code:
konqueror ${besuch} & 
sleep 30 
kill $!
 
OP
T

trommelpeter

Member
Hallo

Und das gleiche nochmals mit $!

Ich staune nicht schlecht welchen Reichtum an unentdeckten Möglichkeiten es noch gibt.
Da meint man , man hat ein Buch gelesen und weis jetzt alles über while , for, if ... usw. Aber scheinbar fehlt mir noch eine ganze Menge :)

Deshalb meine Frage:
Woher bekommt man die ganzen tollen Tipps und Tricks?
Gibt es dazu einen interessante Internetseite?

Gruß Peter
 

regexer

Advanced Hacker
trommelpeter schrieb:
Woher bekommt man die ganzen tollen Tipps und Tricks?
Code:
man bash
man bashbuiltins
info coreutils
...
Das mit dem $! findet man z.B. unter man bash und dort unter der Überschrift Special Parameters
 
OP
T

trommelpeter

Member
Hallo notoxp

Es scheint als müsste ich doch mal meine Englischkenntnisse auffrischen. Aber wie wenn nichts vorhanden ;-)

Aber es liegen noch paar angefangene bis fast fertig gelesene Bücher rum. ich hoffe ich lerne aus den Büchern noch bisschen mehr.

Wo es nützliche Tipps gibt ist zB bin-bash.de .
Aber das Angebot ist etwas mager und ich langweile mich dort langsam, weil vieles Wiederholung ist.

Wer kennt noch ein Internetseite für dezent fortgeschrittene Bash-Fans? In diese Kategorie würde ich mich mal einordnen.

Gruß Peter
 

regexer

Advanced Hacker
trommelpeter schrieb:
Wo es nützliche Tipps gibt ist zB bin-bash.de .
Aber das Angebot ist etwas mager und ich langweile mich dort langsam, weil vieles Wiederholung ist.

Wer kennt noch ein Internetseite für dezent fortgeschrittene Bash-Fans? In diese Kategorie würde ich mich mal einordnen.
Das Problem ist folgendes: Es wird schwierig sein, eine Site zu finden, die exakt dein Nicht-Wissen - und zwar nur das - präsentiert. Da muss man schon selbst eine schreiben :wink:

Es ist sicher etwas mühsam die man-Pages durchzukauen. Mit der aktuellen bash-Version müsste ich das ehrlich gesagt auch einmal tun. Aber der Nutzen ist ungemein hoch. Manchmal lohnt es sogar Bereiche durchzuarbeiten, bei denen man sich schon sicher fühlt. So bekommt man mehr Hintergrundwissen...
 
OP
T

trommelpeter

Member
Dann mach ich mich mal an die Arbeit.
"Es gibt viel zu lesen, lassen wir es liegen" ;-)

Aber Danke für Tipps und so. Zumindest habe ich jetzt mehr Plan in welche Richtung ich weitersuchen und lesen muss.

Gruß Peter :)
 
Oben