У меня есть оболочка script, которую я хотел бы протестировать с помощью shUnit. script (и все функции) находятся в одном файле, так как упрощают установку.
Пример для script.sh
#!/bin/sh
foo () { ... }
bar () { ... }
code
Я хотел написать второй файл (который не нужно распространять и устанавливать) для проверки функций, определенных в script.sh
Что-то вроде run_tests.sh
#!/bin/sh
. script.sh
# Unit tests
Теперь проблема заключается в .
(или source
в Bash). Он не только анализирует определения функций, но также выполняет код в script.
Так как script без аргументов ничего плохого я не мог
. script.sh > /dev/null 2>&1
но я блуждал, если есть лучший способ достичь моей цели.
Edit
Мое предложение об обходном пути не работает в случае вызова script exit
, поэтому мне нужно уловить выход
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
...
}
. script.sh
Вызывается функция run_tests
, но как только я перенаправляю вывод исходной команды, функции в script не анализируются и недоступны в обработчике trap
Это работает, но я получаю вывод script.sh
:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh
Это не печатает вывод, но я получаю сообщение об ошибке, что функция не определена:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh | grep OUTPUT_THAT_DOES_NOT_EXISTS
Это не выводит вывод, а обработчик ловушки run_tests
не вызывается вообще:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh > /dev/null