Ich habe ein Shell-Skript, das ich mit ShUnit testen möchte. Das Skript (und alle Funktionen) befinden sich in einer einzigen Datei, da es die Installation viel einfacher macht.Importieren von Funktionen aus einem Shell-Skript
Beispiel für script.sh
#!/bin/sh
foo() { ... }
bar() { ... }
code
Ich wollte eine zweite Datei schreiben (das muss nicht verteilt und installiert werden), um die Funktionen in script.sh
definiert testen
So etwas wie run_tests.sh
#!/bin/sh
. script.sh
# Unit tests
Jetzt liegt das Problem in der .
(oder source
in Bash). Es analysiert nicht nur Funktionsdefinitionen, sondern führt auch den Code im Skript aus.
Da das Skript ohne Argumente tut nichts Schlechtes ich konnte
. script.sh > /dev/null 2>&1
aber ich irrte, wenn es einen besseren Weg ist mein Ziel zu erreichen.
bearbeiten
Meine vorgeschlagene Abhilfe funktioniert nicht im Fall der Quellen-Skript ruft exit
so dass ich zu stoppen haben die Ausfahrt
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
...
}
. script.sh
Die run_tests
Funktion aufgerufen wird, aber sobald ich umleiten die Ausgabe des Quellbefehls die Funktionen im Skript werden nicht geparst und sind nicht in der Trap-Handler
Dies funktioniert, aber ich bekomme das outp ut von script.sh
:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh
dieser Druck nicht den Ausgang, aber ich erhalte eine Fehlermeldung, dass die Funktion nicht definiert ist:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh | grep OUTPUT_THAT_DOES_NOT_EXISTS
Dieser druckt nicht die Ausgabe und die run_tests
Trap-Handler nicht aufgerufen überhaupt:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh > /dev/null
Vielleicht möchten Sie auf 'shift' die Argumentliste so' main' nicht mit dem '--source in Berührung kommt -only' –
@HubertGrzeskowiak Guter Punkt, behoben. Danke für den Vorschlag! – andrewdotn
Die 'shift' macht da keinen Sinn, da' main' nur dann läuft, wenn '--source-only' ** nicht ** das erste Argument ist. –