测试目录是否包含在.suite上结尾的文件



我目前正在编写一个bash脚本来执行测试套件。除了将套件直接传递给此脚本,例如

./bash-specs test.suite

如果没有套件传递给它,它也应该能够在给定目录中执行所有脚本,例如So

./bash-specs # executes all tests in the directory, namely test.suite

这是像这样实现的

(($# == 0)) && set -- *.suite

因此,如果没有通过套件,则执行所有结尾的文件。这可以正常工作,但如果目录中没有此类文件,则会失败。

这意味着我还需要检查以测试是否实际上有该结尾的文件。我将如何在bash中这样做?

我认为像

这样的测试
[[ -f *.suite ]]

应该有效,但是当目录中有多个文件时,似乎失败了。

-f失败的原因是-f仅采用一个参数。当您进行[[ -f *.suite ]]时,它将扩展到:

[[ -f test.suite test2.suite test3.suite ]]

...这是无效的。

相反,这样做:

shopt -s nullglob
FILES=`echo *.suite`
if [[ -z $FILES ]]; then 
    echo "No suites found"
    exit
fi
for i in $FILES; do
    # Run your test on file $i
done

nullglob是一种外壳选项,它使未发现的通配符图案扩展到一无所有,而不是扩展到通配符图案本身。一旦将$FILES设置为文件列表,我们可以使用-z来测试空虚,并显示适当的错误消息。

ls -al | grep ".suite";echo $?

如果存在文件,则将显示0,如果不存在文件,则会显示1

我会在这样的每个套件文件上迭代:

for i in *.suite ; do
    if [ -x $i ] ; then
        echo running $i
    fi
done

之后:

(($#== 0))&&设置 - *.suite

测试$ 1是否为空(使用-Z),则表示没有名为 *.suite的文件。

相关内容

  • 没有找到相关文章

最新更新