Wie benutze ich globstar für bash älter als v4?

458
DiAlex

Wir verwenden diesen Befehl, um alle Tests mit Mokka auszuführen :mocha ./src/test/**/*.js --recursive

Beachten Sie das Doppel **. Es funktioniert gut auf jeder modernen Bash, außer auf dem CI-System, das ein RedHat ist GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu).

Ich habe gelesen, dass v3 Double Globstar nicht unterstützt .

  • Ich habe versucht, es durch Ausführen auszuführenshopt -s globstar
    • aber nicht zu sagen shopt: globstar: invalid shell option name.
  • Ich bat die Kunden des Clients, die Bash zu aktualisieren
    • aber er sagte "es zeigt mir nicht, dass eine neue version von bash verfügbar ist".
  • Diese andere Antwort war nicht hilfreich.

Frage: Wie kann ich einen Befehl mit **einer Linux-bash v3. * Ausführen ? Irgendwelche Problemumgehung?

0

1 Antwort auf die Frage

5
grawity

Wenn globstar nicht unterstützt wird, wird es nicht unterstützt.

Sie können jedoch die meiste Zeit anzupassen find, xargsund / oder ähnliche Werkzeuge. Ihr Fall ist ziemlich einfach, alles unter einem Verzeichnis, also:

find src/test -name "*.js" -exec mocha --recursive {} +  find src/test -name "*.js" -print | xargs -d '\n' mocha --recursive 

(Durch find werden die Dateinamen anstelle von {}und xargs an das Ende angehängt. In beiden Fällen müssen die wiederholten Argumente nach allen --options am Ende stehen, aber das sollte für die meisten Programme kein Problem sein.)

Wenn mocha für jede Datei einmal ausgeführt wird, ist Folgendes in Ordnung:

find src/test -name "*.js" -exec mocha {} --recursive \; 

Vergleichen Sie -exec … \;(jeweils eine Datei) und die vorherige -exec … +(so viele wie möglich).

Hinweis: In allen obigen Beispielen muss der "*.js"Befehl in Anführungszeichen gesetzt werden, da Sie ihn bearbeiten möchten find, nicht die Shell.