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

如何通过Bash脚本收集所有用户crontab中的Shell脚本至列表

汇总所有用户crontab中的Shell脚本到数组

你的现有代码完成了提取单个用户crontab脚本的基础步骤,但还需要把提取结果正确加入all_scripts数组,同时处理边缘情况(比如用户无crontab、脚本路径含空格等)。以下是修正后的完整实现:

all_scripts=()

for user in "${OS_USER[@]}"; do
    # 跳过无法获取crontab的用户(比如无定时任务的用户)
    crontab_content=$(crontab -u "$user" -l 2>/dev/null) || continue
    
    # 提取所有.sh结尾的脚本路径,遍历添加到数组
    while IFS= read -r script; do
        all_scripts+=("$script")
    done < <(echo "$crontab_content" | awk '{for(i=1;i<=NF;i++) if($i ~ /\.sh$/) print $i}' | sort -u)
done

# 对最终数组全局去重(若不同用户有重复脚本)
all_scripts=($(printf "%s\n" "${all_scripts[@]}" | sort -u))

关键改进点:

  • 错误处理:用2>/dev/null屏蔽crontab -l的错误输出,搭配|| continue跳过无crontab的用户,避免脚本中断。
  • 可靠提取:改用awk遍历crontab的每个字段,精准匹配.sh结尾的脚本,比多层grep更稳定,能适配多数路径格式。
  • 数组安全添加:通过while read循环逐个将脚本路径加入数组,避免因路径含空格导致的字符串拆分问题。
  • 全局去重:最后对整个数组做去重处理,确保最终列表无重复脚本。

比如你给出的示例场景:

  • 用户1的crontab含script1.sh、script2.sh
  • 用户2含script3.sh、script4.sh、script5.sh
  • 用户3含script6.sh

运行脚本后,all_scripts数组会包含所有这6个脚本路径,且无重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:05:31