我有一个我想用 shUnit 测试的 shell 脚本。脚本(和所有功能)都在一个文件中,因为它使安装更加容易。
示例script.sh
#!/bin/sh
foo () { ... }
bar () { ... }
code
我想写第二个文件(不需要分发和安装)来测试定义的功能script.sh
就像是run_tests.sh
#!/bin/sh
. script.sh
# Unit tests
现在问题出在.
(或source
在 Bash 中)。它不仅解析函数定义,还执行脚本中的代码。
由于没有参数的脚本没有什么不好的,我可以
. script.sh > /dev/null 2>&1
但如果有更好的方法来实现我的目标,我正在徘徊。
编辑
我建议的解决方法在源脚本调用的情况下不起作用,exit
所以我必须捕获出口
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
...
}
. script.sh
该run_tests
函数被调用,但是一旦我重定向源命令的输出,脚本中的函数就不会被解析并且在陷阱处理程序中不可用
这可行,但我得到以下输出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