# 22024.12.08
# 查找编译好的可执行文件,并执行测试,将执行的打印信息打印到log文件中
# 串行执行
#!/bin/bash
# 定义一个全局变量,用于保存查找到的 build.sh 文件路径
exec_files_paths=()
# 定义一个全局变量,用于保存查找到的 build.sh 文件所在的目录
exec_file_dirs=()
test_cases_path=""
function find_test_cases() {
local parent="$(pwd)"
while [[ "$parent" != "/" ]]; do
if [[ -d "$parent/testCases" ]]; then
test_cases_path="$parent/testCases"
break
fi
parent="$(dirname "$parent")"
done
if [[ -n "$test_cases_path" ]]; then
echo "Found testCases directory at $test_cases_path"
else
echo "Could not find testCases directory"
fi
}
# 查找 testCases 目录下所有子目录中的 build.sh 文件,并将它们的路径存入全局变量数组 exec_files_paths 中
function find_exec_files() {
local test_cases_path=$1
exec_files_paths=($(find "$test_cases_path" -type f -name "star" -exec printf "%s\n" {} +))
for file_path in "${exec_files_paths[@]}"; do
build_sh_dir=$(dirname "$file_path")
exec_file_dirs+=("$build_sh_dir/")
done
echo "Found ${#exec_files_paths[@]} build.sh files"
}
# 打印全局变量数组 exec_files_paths 中存储的所有 build.sh 文件路径以及对应的目录
function print_exec_files_paths() {
echo "Build.sh file paths and directories:"
for ((i=0; i < ${#exec_files_paths[@]}; i++)); do
echo "$i. "
echo " Directory: ${exec_file_dirs[$i]}"
echo " File path: ${exec_files_paths[$i]}"
done
}
# 逐个进入全局变量数组 exec_file_dirs 中的所有目录,执行目录下的star
# 可以使用 `&` 符号将命令放在后台执行,然后使用 `wait` 命令等待所有后台任务执行完毕。修改代码如下:
# function execute_build_sh_files() {
# for dir_path in "${exec_file_dirs[@]}"; do
# (
# cd "$dir_path" && stdbuf -oL ./star > >(tee -a log.txt > /dev/null)
# ) &
# done
# # wait
# }
function execute_build_sh_files() {
today=$(date +%Y%m%d)
for dir_path in "${exec_file_dirs[@]}"; do
# 获取第一级目录名
first_level_dir=$(basename "$(dirname "$(dirname "$dir_path")")")
# 构造日志文件路径
log_file_path="$dir_path/${today}_${first_level_dir}.log"
# 在子shell中执行命令,并重定向输出
(
cd "$dir_path" && stdbuf -oL ./star | tee -a "$log_file_path" >/dev/null
) &
done
# wait
}
function execute_test_cases_build_sh_files() {
local parent="$(pwd)"
while [[ "$parent" != "/" ]]; do
if [[ -d "$parent/testCases" ]]; then
local test_cases_path="$parent/testCases"
execute_build_sh_files
return
fi
parent="$(dirname "$parent")"
done
echo "Could not find testCases directory"
}
# 查找 testCases 目录,并调用查找函数和打印函数
function main() {
# 22024.12.08
find_test_cases
find_exec_files $test_cases_path
# find_exec_files "$test_cases_path"
print_exec_files_paths
execute_test_cases_build_sh_files
}
# 调用主函数
main