You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本需求:执行不在排除列表中的脚本及代码求助

我来帮你完善这个功能,下面是完整的Bash函数实现,能满足你“执行未被排除的脚本”的需求:

完整函数代码
exclude_process() {
    # 定义两个列表文件的路径,请根据你的实际目录调整${INC}变量
    local ALL_SCRIPTS="${INC}/list_all_process.ini"
    local EXCLUDE_SCRIPTS="${INC}/exclude_proccess.ini"

    # 先检查全量脚本列表是否存在,不存在直接报错退出
    if [[ ! -f "$ALL_SCRIPTS" ]]; then
        echo "Error: 全量脚本列表文件 $ALL_SCRIPTS 不存在" >&2
        return 1
    fi

    # 处理排除列表不存在的情况:给出警告并执行所有脚本
    if [[ ! -f "$EXCLUDE_SCRIPTS" ]]; then
        echo "Warning: 排除列表文件 $EXCLUDE_SCRIPTS 不存在,将执行所有脚本" >&2
        while IFS= read -r script; do
            # 跳过空行,只执行存在且可执行的脚本
            [[ -n "$script" && -f "$script" && -x "$script" ]] && ./"$script"
        done < "$ALL_SCRIPTS"
        return 0
    fi

    # 将排除列表存入关联数组(哈希表),实现O(1)时间复杂度的存在性检查
    declare -A exclude_map
    while IFS= read -r excluded_script; do
        # 跳过空行,避免无效键
        [[ -n "$excluded_script" ]] && exclude_map["$excluded_script"]=1
    done < "$EXCLUDE_SCRIPTS"

    # 遍历全量脚本列表,执行未被排除的脚本
    while IFS= read -r target_script; do
        # 跳过空行
        [[ -z "$target_script" ]] && continue

        # 判断脚本是否在排除列表中
        if [[ -n "${exclude_map["$target_script"]}" ]]; then
            echo "跳过排除脚本: $target_script"
            continue
        fi

        # 检查脚本是否存在且可执行,避免执行无效文件
        if [[ -f "$target_script" && -x "$target_script" ]]; then
            echo "开始执行脚本: $target_script"
            ./"$target_script"
            
            # 可选:如果需要在脚本执行失败时终止函数,取消下面的注释
            # if [[ $? -ne 0 ]]; then
            #     echo "Error: 脚本 $target_script 执行失败" >&2
            #     return 1
            # fi
        else
            echo "Warning: 脚本 $target_script 不存在或无执行权限" >&2
        fi
    done < "$ALL_SCRIPTS"
}
代码详细解释
  • 路径定义:用local关键字定义函数内的文件路径变量,避免污染全局环境,同时方便后续修改路径。
  • 文件存在性校验:
    • 全量列表不存在时直接报错退出,避免后续无意义的执行。
    • 排除列表不存在时给出警告,默认执行所有脚本,提升鲁棒性。
  • 关联数组优化查找:把排除的脚本名存入关联数组,相比每次遍历排除数组,这种方式的存在性检查效率更高,尤其当排除列表很长时。
  • 遍历执行逻辑:
    • 跳过空行,避免处理无效内容。
    • 先判断脚本是否在排除列表,是则跳过;否则检查脚本的存在性和可执行权限,确保执行的是有效脚本。
    • 可选的错误处理:如果需要在单个脚本执行失败时终止整个函数,可以取消注释错误检查的代码块。
额外注意事项
  • 如果脚本不在当前工作目录,请确保list_all_process.ini中存储的是完整路径,或者在函数开头添加cd /path/to/scripts切换到脚本所在目录。
  • 如果列表文件中有注释行(以#开头),可以在读取时添加判断跳过:[[ "$target_script" =~ ^# ]] && continue。
  • 若需要并行执行脚本,可以把./"$target_script"改成./"$target_script" &,但要注意服务器资源占用情况。

内容的提问来源于stack exchange,提问作者pomme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:01:03