Assoziativität Bash

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Mahlzeit zusammen,

    ich habe eine Bash Funktion, welche n mal einen Befehl ausführt.

    Code
    loop n cmd_1

    Jetzt versuche ich einen Block von zwei Befehlen, iterativ n-mal ausführen. Der erste Befehl terminiert mit Exit-Code ≥ 0

    Gibt es eine Form der Klammerung, welche die Linksassoziativität aufhebt und das Gewünschte erreicht?

    So etwa:

    Code
    loop n ( cmd_1; cmd_2; ) 

    Funktion sieht so aus (würde es aber GERNE über die Klammerung lösen).

    Code
    runn() {
        number=$1
        shift
        for i in `seq $number`; do
        $@
        done
    }

    Unter Linux 5.10.103-v7l+ #1529

  • Runn führt cmd_1 n-mal aus, danach wird cmd_2 1-mal ausgeführt. Ich würde gerne n-mal (cmd_1; cmd_2;) ausführen als Block. Also cmd_1 -> cmd_2 -> cmd_1 -> cmd_2 -> cmd_1 ...

  • Hallo framp, hallo hyle,

    ich habe Skat-Karten dabei. Lasst uns drei Karten kloppen. Ich bin der Dritte im Bunde, der keinen Dunst hat, was hier angefragt wird.


    Hallo muxsator,

    was willst Du denn erreichen? Was willst Du eigentlich machen?

    Bestimmt gibt es bessere Lösungswege als den, von dem Du denkst, dass es so gehen könnte.


    Beste Grüsse

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Fragt mal hier nach. Die finden bestimmt eine Lösung

    https://www.3fragezeichen.de/

    Scnr

    Na , wieder die typische Forenarroganz raushängen lassen. Mein Gott, lasst doch diese scheiße mal. Hier hat jemand eine Frage und will Sie beantwortet haben, anstatt Neunmalkluge-Links zu posten hätte man auch die Frage beantworten können. Also sorry, langsam kotzt mich diese Forenmentalität an. Es ist noch niemand als Meister vom Himmel gefallen, der Beitrag gilt stellvertretend auch für den sinnfreien Beitrag von Andreas ..

    Lasst es sein, sowas gehört sich nicht und gehört hier nicht her.

    Wenn's brennt 112 hilft weiter!

  • Code
    loop() { for i in seq 1 $1; do $2 ${@:3}; if [ $? -ne 0 ]; then return; fi; done; }
    compose() { for cmd in "$@"; do $cmd; done; }
    morgen() { echo "Guten Morgen"; }
    morning() { echo "Good morning"; }
    
    
    
    loop 2 compose morgen morning

    Vielleicht kann man darauf etwas aufbauen, aber ich habe da keine große Hoffnung.

    Das sind eher Aufgaben für Hochsprachen.

  • Hallo raspbastler,

    was ist daran sinnfrei?

    Ich habe den TE DIREKT angesprochen. was hier ausser mir nur noch sehr wenige machen.

    Ich habe ihn darauf hingewiesen, dass NIEMAND der hier bisher Antwortenden auch nur einen Hauch davon erhaschen konnte, was dem TE vorschweben könnte.

    Dies ist - so meine Erfahrung - ein Kennzeichen, dass jemand etwas vorhat, was in Erkenntnis des Zieles meistens ganz einfach auf eine andere Weise umsetzbar ist. Genau um diese Information habe ich in direkter Ansprache gebeten.

    Wenn diese Rückmeldung ausbleibt, wird sich in diesem Thread auch keiner mehr darum bemühen, irgendwas von dem Vorhaben verstehen zu wollen.

    Du scheinst entweder die Aufgabe verstanden zu haben oder gar das Ziel aufgenommen zu haben. Es wird Dich niemand daran hindern, Deinen Lösungsweg zu skizzieren. Hast Du einen?


    Beste Grüsse

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Der TE hat sich leider nicht mehr geaeussert :( . Ich lese aus :gk1: den folgenden Implementierungsvorschlag:

  • Der TE hat doch auch schon eine Funktion dazu gepostet, aber das will er offenbar nicht.

    Er sucht eine Lösung, beide Befehle mit einem Kommando in der gewünschten Weise auszuführen, d.h. dem Kommando beide Befehle als Parameter zu übergeben.

    Da weiß ich leider auch nichts. :no_sad:

    Gruss

  • Ich weiß zwar nicht worum es geht, aber poste trotzdem mal eine Codeschnipsel.

    Es ging einfach um das Wiederholen + zusammenfassen von Befehlen ohne die Verwendung einer Funktion.

    Die loop-funktion ist damit soweit ich weiß nicht gemeint gewesen, sondern nur der wiederholende Code, der durch die Schleife ausgeführt werden soll.

    Dein Beispiel funktioniert. Ich bin mal gespannt, was der TE sagt.

  • Weil die Lösung im Grunde so simpel ist, wie mein Bespiel ja zeigt, verwirrte mich hauptsächlich diese Aussage:

    Der erste Befehl terminiert mit Exit-Code ≥ 0

    Denn davon ist ja abhängig, welcher Operator zwischen den beiden Befehlen verwendet werden kann, bzw. am sinnvollsten ist. Deshalb auch oben mein Bezug und Link auf Operatoren.

  • Erstmal - danke @raspbastler.

    Beispiel:

    Code
    runn 3 echo "ja"; echo "nein"
    ja
    ja
    ja
    nein

    Ich hätte gerne über die KLAMMERUNG von <echo "ja"; echo "nein">, nicht der ÄNDERUNG der Funktion runn:

    Code
    ja
    nein
    ja
    nein
    ja
    nein

    Post #15 macht es über 2 Parameter. Ich fragen nach Lösung über Parenthese! Ugh!!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!