shell脚本开多个线程编译当前路径下的AA
```bash
# 获取当前目录下的所有文件夹
# folders=$(find . -maxdepth 1 -type d -name "*[![:space:]]*" | grep -vE "git|vscode")
folders=$(ls -d */)
# 遍历文件夹并输出
for folder in $folders
do
# 判断是否为当前文件夹,删除.
if [[ $folder != "." ]]; then
echo $folder
fi
done
# 输出文件夹列表供选择
echo "当前目录下的文件夹列表:"
echo "$folders"
# 用户输入选择
read -p "请输入要编译的文件夹名(输入all编译所有文件夹):" choices
# 判断选择并进行编译
if [[ $1 == "build" ]];then
function build_AAprocess(){
if [[ $choices == "all" ]]; then
# 创建一个数组来存储线程ID
pids=()
for folder in $folders; do
# 判断是否是文件夹,避免编译到其他类型的文件
if [[ -d $folder ]]; then
echo "开始编译文件夹:$folder"
# 在新的线程中执行编译命令
(build_process $folder/ -j) &
# 将线程ID添加到数组中
pids+=($!)
fi
done
# 等待所有线程完成
for pid in ${pids[*]}; do
wait $pid
done
else
# 判断选择的文件夹是否存在
if [[ -d $choices ]]; then
echo "开始编译文件夹:$choices"
# 执行编译命令
build_process $choices/ -j
else
echo "选择的文件夹不存在"
fi
fi
}
fi
# function scp_AA(){
# expect << EOF
# spawn scp -r ${studio_path}/$choices ${login}@${client_ip}:${DES_DIR}
# expect {
# "yes/no" {send "yes\r";exp_continue}
# "password:" {send "${PASSWD}\n\r"}
# }
# expect eof
# EOF
# }
function build_process(){
CURDIR=$(pwd)
PROCESS_NAME=$1
DEMOS_PATH=${CURDIR}/$1
TARGET_OS=custom
echo "###########prepare Build Process##########${PROCESS_NAME}..."
ara-cli Application --generate-cmake --target-os ${TARGET_OS} --target-platform qemu-arm64 --app ${DEMOS_PATH}
ara-cli RunPluget --name AraComBindingGenerator.pluget --application ${DEMOS_PATH}
ara-cli RunPluget --name AraComManifestGenerator.pluget --application ${DEMOS_PATH}
ara-cli RunPluget --name araEmManifestGen.pluget --application ${DEMOS_PATH}
ara-cli RunPluget --name araDltManifestGen.pluget --application ${DEMOS_PATH}
ara-cli Application --target-os ${TARGET_OS} --target-platform qemu-arm64 --app ${DEMOS_PATH}
echo "###########exit Build Process##########${PROCESS_NAME}..."
}
build_AAprocess $1
for folder in $folders; do
# 删除除了指定文件夹以外的所有文件
find . -maxdepth 1 -type f -not -path "$folder" -not -path "*.sh" -delete
done
find ./: 使用 find 命令从当前目录开始查找文件和文件夹。
-maxdepth 1: 限制查找的深度为1,即只在当前目录下查找,不包括子目录。
-type d: 指定只查找文件夹。
-name "*[![:space:]]*": 使用通配符匹配模式 * 查找所有非空字符命名的文件夹。[![:space:]] 表示不匹配空字符。
|: 管道符,将前一个命令的输出作为后一个命令的输入。
grep -vE "git|vscode": 使用 grep 命令对前一个命令的输出进行过滤。-v 参数表示只显示不匹配的行,-E 参数表示使用扩展正则表达式进行匹配。"git|vscode" 表示匹配包含 git 或 vscode 的行,然后过滤掉这些行。
综合起来,这个命令的作用是在当前目录下查找所有非空字符命名的文件夹,并排除包含 git 和 vscode 的文件夹。