Tengo un script de shell que me gustaría probar con shUnit. El script (y todas las funciones) están en un único archivo, ya que facilita la instalación.Importación de funciones desde un script de shell
Ejemplo para script.sh
#!/bin/sh
foo() { ... }
bar() { ... }
code
que quería escribir un segundo archivo (que no tiene que ser distribuido e instalado) para probar las funciones definidas en script.sh
Algo así como run_tests.sh
#!/bin/sh
. script.sh
# Unit tests
Ahora el problema está en el .
(o source
en Bash). No solo analiza las definiciones de funciones sino que también ejecuta el código en el script.
Dado que la secuencia de comandos sin argumentos no hace nada mal que pude
. script.sh > /dev/null 2>&1
pero yo estaba vagando si hay una mejor manera de lograr mi objetivo.
Editar
Mi solución propuesta no trabajar en el caso de que el script de origen llama exit
así que tengo controlar la salida
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
...
}
. script.sh
La función run_tests
se llama pero tan pronto como vuelvo a dirigir la salida del comando fuente las funciones en el script no se analizan y no están disponibles en el controlador de trampa
Esto funciona pero obtengo el outp UT de script.sh
:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh
Esto no imprime la salida, pero me da un error que la función no está definida:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh | grep OUTPUT_THAT_DOES_NOT_EXISTS
Esto no imprime la salida y el manejador run_tests
trampa no se llama en absoluto:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh > /dev/null
Es posible que desee 'shift' la lista de argumentos de modo' main' no ponerse en contacto con el '--source -only' –
@HubertGrzeskowiak Buen punto, arreglado. ¡Gracias por la sugerencia! – andrewdotn
El 'shift' no tiene sentido allí, porque' main' solo se ejecuta si '--source-only' es ** not ** el primer argumento. –