Bash 脚本到 运行 测试

Bash script to run tests

我有一个 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: 打印完美地打印了路径。似乎我对 bash 的处理不是很好并且遗漏了一些非常明显的东西,但我真的无法让它工作。我至少确保如果我替换

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

echo $CLASSNAMES | tr '/' '.'

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

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

你想要的是命令替换,通过 $(...)(或老式的 `...`):

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

但在这种简单的情况下,您还可以使用 bash 的参数替换为 ${varname//pattern/replacement}:

DOTS=${CLASSNAMES//\//.}