2012-05-11 4 views
0

Так что мне нужно запустить кучу (maven) тестов с использованием тестовых файлов в качестве аргумента для задачи maven.сценарий для запуска определенной программы с вводом из заданного каталога

Что-то вроде этого:

mvn clean test -Dtest=<filename>

и тестовые файлы обычно организованы в разных каталогах. Поэтому я пытаюсь написать скрипт, который выполнил бы вышеуказанную команду и автоматически подал бы имя всех файлов в данном каталоге до -Dtest.

Так что я начал с shellscript под названием «run_test»:

#!/bin/sh 
if test $# -lt 2; then 
    echo "$0: insufficient arguments on the command line." >&1 
    echo "usage: $0 run_test dirctory" >&1 
    exit 1 
fi 
for file in allFiles <<<<<<< what should I put here? Can I somehow iterate thru the list of all files' name in the given directory put the file name here? 
    do mvn clean test -Dtest= $file 

exit $? 

часть, где я застрял, как получить список имен файлов. Спасибо,

ответ

1

Предполагая, что $1 содержит имя каталога (проверка пользовательского ввода является отдельный вопрос), то

for file in $1/* 
do 
    [[ -f $file ]] && mvn clean test -Dtest=$file 
done 

будет работать COMAND на все файлы. Если вы хотите рекурсию подкаталогов, то вам нужно использовать команду find

for file in $(find $1 -type f) 
do 
    etc... 
done 
+0

Что делать, если аргумент только дает мне имя каталога, но не место. Другими словами, я точно знаю, что данный каталог находится где-то в '/. ' но это может быть где угодно. Так что я должен использовать 'для файла в $ (find $ 1 -type d)' (d для каталога?)? –

+0

И в чем смысл '[[-f $ file]]'? –

+0

Оберните один из указанных выше в 'for dir в $ (find. -type d -name $ 1); do ... inner loop ... done' –

1
#! /bin/sh 
# Set IFS to newline to minimise problems with whitespace in file/directory 
# names. If we also need to deal with newlines, we will need to use 
# find -print0 | xargs -0 instead of a for loop. 
IFS=" 
" 
if ! [[ -d "${1}" ]]; then 
    echo "Please supply a directory name" > &2 
    exit 1 
else 
    # We use find rather than glob expansion in case there are nested directories. 
    # We sort the filenames so that we execute the tests in a predictable order. 
    for pathname in $(find "${1}" -type f | LC_ALL=C sort) do 
    mvn clean test -Dtest="${pathname}" || break 
    done 
fi 
# exit $? would be superfluous (it is the default) 
Смежные вопросы