if abfrage innerhalb einer pipe.

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von flappinski, 04.04.2008.

  1. #1 flappinski, 04.04.2008
    flappinski

    flappinski Foren As

    Dabei seit:
    31.03.2006
    Beiträge:
    87
    Zustimmungen:
    0
    Hallo
    Ihr wist ja bestimmt, wie ich eine Entscheidung innerhalb der Pipe treffen kann.
    Im folgenden Beispiel steht cut -f1-10 doppelt drin. Das hätte ich nun gerne auserhalb der Schleife, damit ich es nur einmal drin haben muss. Any ideas? Von mir wäre einen Idee, wenn ich cut mit stdout befüttere
    (z.B.
    cut -f1-10 < /dev/stdout
    funktioniert natürlich so nicht....:)).
    Vielen Dank,
    Stephan

    #!/bin/bash

    number=$1

    if [ $number = "1" ]; then
    head -20 File1 | cut -f-10
    else
    tail -10 File1 | cut -f-10
    fi
     
  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. #2 Aqualung, 04.04.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Vielleicht könntest Du das so

    Code:
     [ $number == 1 ] && head -20  File1  | cut -f-10 || tail -10 File1  | cut -f-10
    lösen.

    Gruß Aqualung
     
  4. #3 flappinski, 04.04.2008
    flappinski

    flappinski Foren As

    Dabei seit:
    31.03.2006
    Beiträge:
    87
    Zustimmungen:
    0
    Hi Aqualung,
    danke für Deinen Vorschlag, ich habe mich mal wieder nicht so ganz klar ausgedrückt:
    das if, then, else stört mich gar nicht. Was mich stört, ist, dass ich zweimal den cut-befehl drin habe. Denn dieser wird in meinem Originalscript durch etwas viel längeres ersetzt....
    Zur Zeit lse ich das, indem ich über einen temporäre Datei gehe, aber das ist ja nicht gerade sehr efizient...
    LG,
    Stephan
     
  5. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    wie wäre es mit einer funktion schreiben ? ... die du einfach aufrufst ? ... und ja es gibt funktionen in shellscripten :> auch wenn man sie nicht oft sieht ;)

    aber eine anderelösung weis ich jetzt nicht ... evtl ein anderer mfg :)
     
  6. #5 Gott_in_schwarz, 04.04.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Ist zwar ähnlich wie eine temporäre Datei vom Ansatz her, aber wie wärs mit ner benannten Pfeife?
    Siehe dazu "mkfifo" oder "mknod Pipename p".
    Dann müsste man das Ding aber in den Hintergrund schicken, irgendwie so:
    Code:
    mknod /tmp/IMAPIPE p
    cut -f-10 < /tmp/IMAPIPE &
    
    if [ $number = "1" ]; then
       head -20 File1 > /tmp/IMAPIPE
    else
       tail -10 File1 > /tmp/IMAPIPE
    fi
    
    rm /tmp/IMAPIPE
    Aber eigentlich ist das das Gleiche in grün.
    Dann kann man natürlich auch gleich den "output capturen":
    Code:
    cut -f-10 < /tmp/IMAPIPE > OUTFILE &
    oder so, weißt du aber scheinbar ja schon selber, kommt halt drauf an, was im Skript eigentlich anstatt des "cut"-Kommandos steht.
    Ansonsten ist der Weg über eine temporäre Datei mit weniger "overhead" verbunden und von daher eventuell vorzuziehen..
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 flappinski, 05.04.2008
    flappinski

    flappinski Foren As

    Dabei seit:
    31.03.2006
    Beiträge:
    87
    Zustimmungen:
    0

    also, im moment läuft das ganz prima mit der temporären Datei. Und ich will eigentlich nicht mit so benannten Pfeifen arbeiten (ist das denn Standard). Aber eines läst mich doch nochmal aufhorchen. Den "output capturen", das weiss ich nämlich gar nicht schon selber. Kann ich denn auch den Standard Output capturen? Ich habe ja genau sowas versucht, aber schnell aufgegeben, da es nich gleich funktionierte, und ich nicht wusste, ob es überhaupt geht.
    Vielen Dank schon mal,
    Stephan
     
  9. #7 Gott_in_schwarz, 05.04.2008
    Zuletzt bearbeitet: 05.04.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Erstmal: die Dinger schimpfen sich "named pipes", ich hab die einfach mal "humoröserweise" benannte Pfeifen genannt.
    Damit kann man das selbe machen, wie mit unnamed pipes (|), nämlich den output von einem Kommando als input eines anderen nehmen. Wobei man das normalerweise nimmt, um Prozesse von verschiedenen "Eltern-Shells" miteinandern interagieren zu lassen. (Was mit "anonymen pipes" nicht geht.)

    Was ich mit "output capturen" meinte war, einfach den STDOUT von deinem cut-Kommando in eine Datei umzuleiten. (cut -f-10 > OUTFILE)
    Jedes Kommando hat ja stdout und stdin. (Und stderr)
    Egal, ich hab hier mal was lustiges für dich:
    Code:
    var=""; echo 'bla' | ([ "$var" ] && cat -n || cat)
    bla
    und:
    Code:
    var="uae"; echo 'bla' | ([ "$var" ] && cat -n || cat)
         1  bla
    Wäre das nicht, was du willst? Ansonsten ist das auch nicht wirklich wild, wenn ein Kommando zweimal vorkommt, oder? Und wenns ne case-Anweisung sein sollte, kannst du ja notfalls immernoch über ne temporäre Datei gehen...

    [Edit]:
    Hier das ganze mal etwas "lesbarer":
    Code:
    var="something"
    echo "Irgendein output" | (
      if [ "$var" ]; then
        cat
        echo '$var ist "gefuellt".'
      else
        cat
        echo '$var ist "ungefuellt".'
      fi
    )
    Also je nachdem, ob $var leer oder "gefüllt" ist, wird entweder der if oder der else Zweig ausgeführt. Die cat-Kommandos bekommen dabei jeweils ihr STDIN vom STDOUT des "äußeren" echo-Kommandos.
     
Thema:

if abfrage innerhalb einer pipe.

Die Seite wird geladen...

if abfrage innerhalb einer pipe. - Ähnliche Themen

  1. mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern

    mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern: Hallo zusammen, es geht um folgenden Teil meiner .sh-Datei: NumberCheck=`mysql $SQL_ARGS "SELECT lkw, Firma FROM adb_group WHERE...
  2. [Anfänger am Werk] if abfrage machen

    [Anfänger am Werk] if abfrage machen: Hey, Ich würde gerne eine Shell Schreiben, die wenn eine Variable höher als x ist, einen Befehl ausführt. Da ich aber totaler Anfänger bin, habe...
  3. MySQL DB im remote abfrage

    MySQL DB im remote abfrage: Moin, zur Zeit befinde ich mich in der Planungsphase für eine Smartphone Application die Anfragen an eine DB stellen soll. Allerdings ist das...
  4. WLAN-Passwort-Abfrage abschalten funktioniert nur bedingt

    WLAN-Passwort-Abfrage abschalten funktioniert nur bedingt: Hallo, immer wenn ich mich ins Uni-WLAN einwählen will, macht Ubuntu Gnome das nicht automatisch, sondern zeigt ein Fenster mit dem Login und...
  5. Vorschau von MySQL 5.7 mit höherer Abfragegeschwindigkeit

    Vorschau von MySQL 5.7 mit höherer Abfragegeschwindigkeit: Oracle hat eine Testversion von MySQL 5.7 bereitgestellt. Das populäre freie Datenbanksystem erhielt in dieser Version einige Verbesserungen in...