Bash脚本运行测试

时间:2015-01-12 17:29:10

标签: bash

我有一个带有单元测试的java项目,我正在Linux系统上开发,所以我制作了一个bash脚本来运行我的所有测试。我不能真正让它工作

#!/bin/bash
JUNITPATH="/usr/share/java/junit4-4.11.jar"
TESTCLASSES=$(find kai/modsogner_och_durin/testing/* | grep .class$)
EXT="class"
CLASSNAMES=${TESTCLASSES%.$EXT}
echo "BEFORE: $CLASSNAMES"
DOTS=$CLASSNAMES | tr '/' '.'
echo AFTER: $DOTS
java -cp .:$JUNITPATH org.junit.runner.JUnitCore $DOTS 

echo语句和DOTS变量显然仅用于调试目的。我的问题是,当我尝试分配给DOTS时,当我检查DOTS时它是空的。

echo AFTER: $DOTS

这会打印一个空行,但BEFORE:print会完美打印路径。看起来我对bash并不是很好,我错过了一些非常明显的东西,但我真的无法让它工作。我做了至少确保如果我替换

DOTS=$CLASSNAMES | tr '/' '.'

echo $CLASSNAMES | tr '/' '.'

它按照预期用点分隔的包打印类名。所以这似乎是一个语法错误。

1 个答案:

答案 0 :(得分:3)

FOO=bar baz之类的常规赋值需要一个字符串并将其赋值给变量;它不会运行任何命令。

您想要的是通过$(...)(或过时的`...`)命令替换:

DOTS=$(echo $CLASSNAMES | tr '/' '.')

但在这个简单的例子中,您还可以使用${varname//pattern/replacement}使用bash的参数替换:

DOTS=${CLASSNAMES//\//.}
相关问题