我的许多测试脚本都开始了:
set -e test -n "$V" && set -x
我没有在每个脚本中放置这些行(或采用通用脚本) 喜欢通过环境获得该功能。是否有一种可移植的方式来使用环境设置来使sh表现得好像已经调用了“set -e”或“set -x”?是否有非便携式(即特定于shell)的方式来做同样的事情?
(我已经将这个问题标记为automake,因为这是我现在所处的框架,并且希望能够在TESTS_ENVIRONMENT中添加一些内容,这将允许我省略每个脚本中的那些行,但显然是问题不是特定于汽车的。)
答案 0 :(得分:3)
只需将其添加到您的脚本中:
eval "${ENABLE_DEBUG}"
现在您可以将env变量ENABLE_DEBUG
设置为set -e ; test -n "$V" && set -x
以启用调试,或者您可以将其设置为未设置。
请注意,如果您有“未定义变量失败”选项处于活动状态(set -u
或set -o nounset
),则会失败。如果是这种情况,您需要检查变量是否已设置或使用bash:
eval "${ENABLE_DEBUG}"
将变量设置为:
,“不执行任何操作”命令。
答案 1 :(得分:1)
回答automake部分。
如果你有
TESTS = foo.test bar.test baz.test
生成的Makefile
会有test
目标,大致类似于
test:
...
$(TEST_ENVIRONMENT) $(srcdir)/foo.test
$(TEST_ENVIRONMENT) $(srcdir)/bar.test
$(TEST_ENVIRONMENT) $(srcdir)/baz.test
...
您实际上可以将TEST_ENVIRONMENT
设置为一个命令,该命令将使用sh -xe
或sh -e
启动您的shell脚本。
如果所有测试都是shell脚本,那么这可以设置为
TEST_ENVIRONMENT = $(SHELL) -e $${V+-x}
如果不是所有测试都是shell脚本,那么可以
TEST_ENVIRONMENT = $(srcdir)/run
并编写脚本run
,例如:
#!/bin/sh
case $1 in
*.py)
exec python "$@";;
*.test)
exec sh -x ${V+-x} "$@";;
*)
echo "Unknown extension" >&2
exit 2;;
esac