[gelöst] skript-Protokoll

Hinweis: In dem Thema [gelöst] skript-Protokoll gibt es 19 Antworten auf 2 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Hallo,
    ich versuche gerade ein paar tägliche Abläufe in winzige Skripte zu packen. Ich orientiere mich dabei an
    http://www.linux-praxis.de/lpic1/lpi102/1.109.2.html
    http://www.bin-bash.de/scripts.php
    http://www.selflinux.org/selfl…hellprogrammierung03.html
    https://wiki.ubuntuusers.de/shell/Bash-Skripting-Guide_für_Anfänger
    usw


    und finde in dem ganzen Wust den entscheidenden Punkt nicht


    Beispiel:
    Ich möchte den Befehl zum Aufwecken eines anderen Rechners

    Code
    wol 00:11:25:f5:9a:57


    in ein Skript packen, so dass ich die Kontrolle überwachen kann.
    nach vielem Probieren sieht es jetzt so aus:

    Code
    linux-desktop:~/skripte # cat  ./test3.sh
    #!/bin/bash
    wol 00:11:25:f5:9a:57 > prot.txt
    cat prot.txt
    
    
    linux-desktop:~/skripte # ./test3.sh
    Waking up 00:11:25:f5:9a:57...
    linux-desktop:~/skripte #


    Gibt es keine Möglichkeit, einen Befehls+Parameter so aufzurufen dass es auf dem Bildschirm ausgegeben wird?
    Nicht dass ich meine Skripte so künstlerisch wertvoll finde, dass ich sie jedes Mal betrachen möchte aber 'blind' finde ich die Fehler nicht ..


    Und '>' funktioniert nur zeilenweise ..

    There's no place like 127.0.0.1

    2 Mal editiert, zuletzt von wurzel99 ()

    Für den Inhalt des Beitrages 84200 haftet ausdrücklich der jeweilige Autor: wurzel99

  • Gibt es keine Möglichkeit, einen Befehls+Parameter so aufzurufen dass es auf dem Bildschirm ausgegeben wird?

    Ein schlichtes echo davorsetzen.

    Code
    echo wol .....
    wol ....


    Zitat

    Und '>' funktioniert nur zeilenweise ..

    Die bash kennt mehrere Konstrukte, um ein Kommando über mehrere Zeilen zu verarbeiten, obwohl sie ja rein zeilenweise arbeitet.
    Du willst vermutlich schlicht geschweifte Klammern.

    Code
    doSomething
    { doSomethingComplicated; anotherStep; } > someFileOrWhatever
    { doing
    commands
    inMultiLines ; } > irgendwohin

    Das letzte ; ist wichtig!

    Für den Inhalt des Beitrages 84203 haftet ausdrücklich der jeweilige Autor: LinuPia

  • Zitat

    Ein schlichtes echo davorsetzen.

    klar .. auch schon probiert ..

    Code
    linux-desktop:~/skripte # cat  ./test2.sh
    #!/bin/bash
    echo wol 00:11:25:f5:9a:57
    
    
    linux-desktop:~/skripte # ./test2.sh
    wol 00:11:25:f5:9a:57
    linux-desktop:~/skripte #


    dann wird die Zeile ausgegeben aber nicht ausgeführt. hmmm .. bislang wachte der Rechner dann nicht auf ..


    Seltsamerweise funktioniert folgendes aber:

    Code
    linux-desktop:~/skripte # cat  ./test4.sh
    #!/bin/bash
    echo ls *.sh
    
    
    linux-desktop:~/skripte # ./test4.sh
    ls test1.sh test2.sh test3.sh test4.sh
    linux-desktop:~/skripte #

    There's no place like 127.0.0.1

    Für den Inhalt des Beitrages 84204 haftet ausdrücklich der jeweilige Autor: wurzel99

  • Zitat

    klar .. auch schon probiert .. .. dann wird die Zeile ausgegeben aber nicht ausgeführt. hmmm .. bislang wachte der Rechner dann nicht auf ..

    Natürlich musst du den Befehl dann in einer weiteren Zeile auch aufrufen.


    Zitat

    Seltsamerweise funktioniert folgendes aber:

    Code
    linux-desktop:~/skripte # cat  ./test4.sh
    #!/bin/bash
    echo ls *.sh

    Das funktioniert nicht.
    Oder besser: es funktioniert nicht, wie du es meinst, sondern aus anderen Gründen anders.


    Die bash kennt ein sogenanntes Globbing. Wenn die bash eine Codezeile parst, arbeitet sie bestimmte Schritte in bestimmter Reihenfolge ab. Wir nennen das "Expandieren". Tauchen in der Codezeile Konstrukte, wie *.sh auf, so setzt die bash an dieser Stelle alle Dateinamen ein, die diesem "Glob" entsprechen UND im aktuellen WorkingDirectory gefunden werden. Schon beim Parsen wird deine Zeile zu:

    Code
    echo ls test1.sh test2.sh test3.sh test4.sh


    Der ls Befehl wird in deinem Script NIEMALS ausgeführt.

    Für den Inhalt des Beitrages 84205 haftet ausdrücklich der jeweilige Autor: LinuPia

  • Zitat

    Natürlich musst du den Befehl dann in einer weiteren Zeile auch aufrufen.

    Das löst nicht das Problem!
    Es soll ja der Befehl und seine Ausgabe auf dem Bildschirm erscheinen - damit ich sehen kann ob alles so läuft wie ich mir das gedacht habe ..

    Code
    linux-desktop:~/skripte # wol 00:11:25:f5:9a:57
    Waking up 00:11:25:f5:9a:57...


    Wenn ich jetzt einen Tippfehler mache soll auch die Fehlermeldung kommen

    Code
    linux-desktop:~/skripte # wop 00:11:25:f5:9a:57
    If 'wop' is not a typo you can use command-not-found to lookup the package that contains it, like this:
    	cnf wop


    Bei deiner Lösung krieg ich das echo (ohne Ausführung des Befehls) und dann die blinde Ausführung ohne Protokoll


    ----------------

    Zitat

    Das funktioniert nicht ..
    Oder besser: es funktioniert nicht, wie du es meinst, sondern aus anderen Gründen anders.

    darüber denke ich später mal nach ... :smilie_pc_153:

    There's no place like 127.0.0.1

    Für den Inhalt des Beitrages 84206 haftet ausdrücklich der jeweilige Autor: wurzel99

  • Zitat

    Es soll ja der Befehl und seine Ausgabe auf dem Bildschirm erscheinen - damit ich sehen kann ob alles so läuft wie ich mir das gedacht habe ..

    In der bash läuft immer alles anders, als wir denken.


    Lies das hier:

    Code
    help set | sed -rn '/^[[:blank:]]+-x/p'
    # und das hier:
    help set | sed -rn '/^[[:blank:]]+-v/p'


    Füge also in deinem Script am Anfang (natürlich NACH der Shebangzeile) das hier ein:

    Für den Inhalt des Beitrages 84207 haftet ausdrücklich der jeweilige Autor: LinuPia

  • Zitat

    set -x
    #oder
    set -v
    #oder
    set -vx

    guter Hinweis !! - Das war es!!
    Danke !!

    Zitat

    help set | sed -rn '/^[[:blank:]]+-x/p'
    # und das hier:


    help set | sed -rn '/^[[:blank:]]+-v/p'

    besser nicht .. ich hab keine Lust auf Psychiatrie ..

    There's no place like 127.0.0.1

    Für den Inhalt des Beitrages 84208 haftet ausdrücklich der jeweilige Autor: wurzel99

  • Nicht sonderlich sinnvoll.


    Würdest du es schlicht in eine Konsole kopieren, dann würdest du lesen, was das set -v|x tut.
    Man nennt das Lernen.


    Und wenn du vor Shellbefehlen Angst hast, solltest du es komplett lassen.
    Wirklich nicht sinnvoll.

    Für den Inhalt des Beitrages 84209 haftet ausdrücklich der jeweilige Autor: LinuPia

  • ich hab keine Angst vor Lernen .. dazu bin ich hier ..

    Code
    help set | sed -rn '/^[[:blank:]]+-x/p'


    nur .. das war etwas kompliziert zu lesen .. um das nachzuvollziehen brauch ich noch etwas ..
    Natürlich hab ich es in die Konsole kopiert und gesehen was passiert..
    Nur warum da was passierte ..


    Hab doch als Profi etwas Geduld mit den Anfängern .. :D :D

    There's no place like 127.0.0.1

    Für den Inhalt des Beitrages 84210 haftet ausdrücklich der jeweilige Autor: wurzel99

  • Deine Bemerkung legte nahe, dass du sowas eben nicht machst.


    Wenn du Kindergarten spielen willst, bitte.
    Aber nicht mit mir.


    Wieder sinnlos getippt.
    Vielleicht denkst du mal drüber nach, was die Kommunikation in Foren erfordert, und wie sie sich von Kindergarten und Stammtisch unterscheidet.

    Für den Inhalt des Beitrages 84212 haftet ausdrücklich der jeweilige Autor: LinuPia