我有一个我想用shUnit测试的shell脚本。脚本(和所有功能)都在一个文件中,因为它使安装变得更加容易。从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
函数被调用,但只要我重定向源命令的输出脚本中的功能不会被解析,并且在陷阱处理程序中不可用
这可行,但我得到了outp的script.sh
UT:
#!/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
到'shift'参数列表所以'main'不会取得联系与'--source您可能希望只有' –
@HubertGrzeskowiak好点,固定。感谢您的建议! – andrewdotn
'shift'在那里没有意义,因为'main'只在'--source-only'不是**第一个参数时运行。 –