file zum an-/abschalten

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Nemesis, 18.06.2006.

  1. #1 Nemesis, 18.06.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    hi,
    irgendwie habe ich nen narren an xdesktopwaves gefressen ;)
    jetzt will ich mir ein shellscript basteln, damit ich mir nen button auf den desktop legen kann, der es mir startet/beendet.
    das script muss überprüfen, ob nicht schon xdesktopwaves läuft, tut es das, muss es "xdesktopwaves -end" aufrufen, existiert noch kein slcher prozess muss es nur "xdesktopwaves" aufrufen.
    den prozess bekomme ich über "ps -e | grep xdesktopwaves", nur steige ich durch die if funktion nicht ganz durch.
    das müsste doch dann heissen:
    Code:
    #!/bin/bash
    if "ps -e | grep xdesktopwaves"=1 ; then
    "xdesktopwaves -end"
    else
    "xdesktopwaves"
    fi
    aber irgendwas passt da noch nicht, ich glaube dass das daran liegt, dass ich den prozess nicht mit "1" für "es läuft" vergleichen darf.

    kann mir da jemand weiterhelfen?

    thx
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Code:
    if [ "$(ps -e | grep xdesktopwaves | grep -v grep)" ]; then
    ...
    
    Gruss, Xanti
     
  4. #3 Wolfgang, 18.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Mach es dir mal etwas einfacher, und speichere den Wert in einer Variablen.
    Dann wird es auch klarer für dich, wie es mit if funktioniert.
    Es geht auch anders, aber dann solltest du den Rückgabewert von grep auswerten.
    Hier ein Beispiel für Variante 1
    Code:
    TEST=$(ps -e | grep "[x]desktopwaves");
    if [ -n "$TEST" ]; then
    echo "Test ist nicht leer, Programm läuft";
    ...
    else
    echo "Test ist leer, also nicht gestartet";
    ...
    fi
    
    Beim Starten des Programmes, solltest du noch den vollen Pfad hinzufügen.
    Siehe auch Umgebungsvariablen für nicht interaktive Shell und angrenzende Probleme.

    Gruß Wolfgang
     
  5. #4 Nemesis, 18.06.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    hi,
    so funktionierts, jetzt hab ich auch kapiert, wie das mit der if funktion funktioniert :)
    Code:
    if [ das zutrifft ]; then
    "mach das"
    else
    "mach jenes"
    fi
    ich habs jetzt:
    Code:
    TEST=$(ps -e | grep "[x]desktopwaves");
    if [ -n "$TEST" ]; then
    #echo "Test ist nicht leer, Programm läuft";
    xdesktopwaves  -end &
    else
    #echo "Test ist leer, also nicht gestartet";
    xdesktopwaves &
    fi
    und es funktioniert :)

    eine frage bleibt aber noch:
    warum ist das x in eckigen klammern?:
    TEST=$(ps -e | grep "[x]desktopwaves");

    thx
     
  6. #5 Wolfgang, 19.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Um bei grep die bestehenden Prozesse in denen dein Suchwort matcht vom grep-Prozess zu unterscheiden.
    Der Prozess grep "xdesktopwaves" matcht sonst selbst darauf.
    Schau dir einfach mal die Ausgabe von
    grep "xdesktopwaves" an.
    Die shell löst so erst die Anfrage von grep auf, bevor es zum Match kommt.-> mit der [x].
    Die Zeichenfolge muss so also auf ein x matchen, nicht aber auf eine eckige Klammer.
    Hoffe es war verständlich.


    Gruß Wolfgang
     
  7. #6 Nemesis, 19.06.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    ich glaube ich verstehe worauf du hinauswillst, der befehl "ps -e | grep xdesktopwaves" erzeugt selbst auch wieder einen prozess, der das schlagwort "xdesktopwaves" enthält, diesen prozess möcht eman aber nicht haben, sondern man möchte ja den eigentlichen "xdesktopwaves" haben.
    hm, nur sieht die ausgabe bei mir beidesmal gleich aus:
    Code:
    ~$ ps -e | grep [x]desktopwaves
     5694 ?        00:00:00 xdesktopwaves
    ~$ ps -e | grep xdesktopwaves
     5694 ?        00:00:00 xdesktopwaves
    müsste da dann nicht noch ein prozess ala "xxxx ? 00:00:00 grep xdesktopwaves" sein?

    thx
     
  8. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Hallo zusammen

    Um zu überprüfen ob ein Prozess läuft würde ich 'pgrep' verwenden, der zeigt sich selber nicht an...
    http://man.splitbrain.org/pgrep

    Gruss
    d22
     
  9. #8 Wolfgang, 19.06.2006
    Zuletzt bearbeitet: 19.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Entscheidend ist auch, welche Version von ps Verwendung findet.
    Da das aber nicht bekannt war, habe ich eine Variante vorgeschlagen, die garantiert immer funktionieren sollte.
    Wenn du das mal mit den Otionen ax versuchst, wirst du den Unterschied sehen.
    Code:
    [b]$ ps ax | grep "mozilla"
    ps ax | grep "mozilla"
     3406 ?        Ssl    0:26 /usr/lib/mozilla/mozilla-bin -UILocale de-AT -ContentLocale AT -mail
     3739 pts/0    R+     0:00 grep mozilla
    
    $ ps ax | grep "[m]ozilla"
     3406 ?        Ssl    0:27 /usr/lib/mozilla/mozilla-bin -UILocale de-AT -ContentLocale AT -mail[/b]
    
    Natürlich kann man auch pgrep verwenden, so es verfügbar ist.

    Gruß Wolfgang
    EDIT/ Fipptehler korrigiert.
    Hab die falsche Zeile zweimal hier reinkopiert.
     
  10. #9 Nemesis, 19.06.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    hm, das verstehe ich noch nicht ganz mit der eckigen klammer, warum nimmt er dann da den prozess "/usr/lib/mozilla/mozilla-bin -UILocale de-AT -ContentLocale AT -mail" und nicht den "3739 pts/0 R+ 0:00 grep mozilla" ?
    bei beiden ist doch die selbe zeichenfolge vorhanden.
     
  11. #10 Wolfgang, 19.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    War ein Fehler von mir, habe leider zweimal die selbe Commandozeile erwischt.
    Hab es korrigiert.
    Hauptsache du hast es verstanden was ich meinte.
    x Wählt Prozesse ohne kontrollierende ttys

    Gruß Wolfgang
     
  12. #11 Goodspeed, 19.06.2006
    Goodspeed

    Goodspeed Foren Gott
    Moderator

    Dabei seit:
    21.04.2004
    Beiträge:
    4.165
    Zustimmungen:
    1
    Ort:
    Dresden
    Wolgang is n bissl durch den wind (liegt sicher am Wetter ;) )

    Code:
    $ ps ax | grep "mozilla"
    ps ax | grep "mozilla"
     3406 ?        Ssl    0:26 /usr/lib/mozilla/mozilla-bin -UILocale de-AT -ContentLocale AT -mail
     3739 pts/0    R+     0:00 grep mozilla
    
    $ ps ax | grep "[m]ozilla"
     3406 ?        Ssl    0:27 /usr/lib/mozilla/mozilla-bin -UILocale de-AT -ContentLocale AT -mail
    
     
  13. #12 Wolfgang, 19.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Aber nun stimmt es.

    Gruß Wolfgang

    Hast Recht, bin etwas durchs Wetter, liegt sicher am Wind. :D
     
  14. #13 Nemesis, 19.06.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    hm, ok, aber die beiden zeilen:
    Code:
     
    3406 ?        Ssl    0:26 /usr/lib/mozilla/mozilla-bin -UILocale de-AT -ContentLocale AT -mail
     3739 pts/0    R+     0:00 grep mozilla
    
    enthalten doch beide das wort mozilla, sowie en buchstaben m, warum nimmt er dann nur die 1.zeile, und lässt die mit dem grep weg?

    da steige ich nicht ganz hinter die zeile, das ist glaube ich derschlüssel:
    d.h. es wird ps ax durchgeschaut, bevor sich der eigentliche prozess "ps ax" darin befindet?
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Wolfgang, 20.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ich versuch es nochmal zu erklären.:headup:

    Zunächst:
    ps -ax listet alle Prozesse auf, auch die ohne tty.
    grep "mozilla"
    und
    grep "[m]ozilla
    matchen auf das gleiche Pattern.
    Der Trick besteht nur darin, dass grep auch sich selbst findet, weil das Pattern mozilla darin vorkommt, jedoch nicht [m]ozilla.
    Das [m]ozilla ist dabei Teil eines regulären Ausdrucks -> Zeichenklasse m gefolgt von ozilla.
    Somit greift grep nicht mehr, da es ja nicht auf [m]ozilla matcht.
    Hoffe du hast das diesmal verstanden.
    Andere Möglichkeiten sind das über ein doppeltes grep zu realisieren
    ps ax|grep "mozilla"|grep -v "grep"
    -v negiert das gefundenen Pattern

    HTH
    Gruß Wolfgang
     
  17. #15 Nemesis, 20.06.2006
    Zuletzt bearbeitet: 20.06.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    ok, dann matcht das nicht auf den grep prozess, weil der [] enthält, der mozilla prozess aber nicht, wenn ich das jetzt richtig verstanden habe :think:
    dann geben die klammern soviel an, wie: "ignoriere bei der suche die zeilen, welche die zeichenfolge inkl. klammern enthalten, und nimm die zeilen, welche nur die zeichenfolge enthalten", richtig so ?

    edit:

    jetzt hab ichs:
    die zeichenfolge mozilla ist ja im mozilla-prozess die selbe wie im grep-prozess, also muss zum grep-prozess etwas hinzu, was die zeichenfolge ändert, nicht aber den prozess an sich, so wird der grep-prozess icht angezeigt, da er ja nicht der zeichenfolge entspricht :)

    hat etwas länger gedauert, aber ich habs :)

    thx
     
Thema:

file zum an-/abschalten

Die Seite wird geladen...

file zum an-/abschalten - Ähnliche Themen

  1. Apache Log-Meldung File does not exist

    Apache Log-Meldung File does not exist: Hallo zusammen, in der Logdatei von Apache wird folgende Meldung ausgegeben: … [Thu Jan 07 14:36:03 2016] [error] [client 111.222.333.444] File...
  2. Pydio stellt Enterprise-File-Sharing-Plattform vor

    Pydio stellt Enterprise-File-Sharing-Plattform vor: Das französische Tech Startup Pydio hat eine spezifische Unternehmensversion seiner gleichnamigen freien File-Sharing- und Sync-Plattform...
  3. Artikel: »cut out selected fields of each line of a file«

    Artikel: »cut out selected fields of each line of a file«: Ein klassisches Programm im Unix-Werkzeugkasten ist cut. In keinem ordentlichen Tutorial zur Shellprogrammierung fehlt es, denn es ist ein...
  4. Linux Standard Base 5.0 und Filesystem Hierarchy Standard 3.0 erschienen

    Linux Standard Base 5.0 und Filesystem Hierarchy Standard 3.0 erschienen: Nach etlichen Jahren ist die Standardisierung von Linux-Systemen endlich wieder ein Stück vorangekommen. Die jetzt veröffentlichte Linux Standard...
  5. agorum core 7.5 mit sicherem Filesharing und DATEV

    agorum core 7.5 mit sicherem Filesharing und DATEV: Das freie Dokumentenverwaltungssystem »agorum core« wurde in Version 7.5 veröffentlicht. Das System enthält jetzt neben anderen Neuerungen...