如何用Bash实现每隔2秒逐个打开并定时关闭URL?
批量定时打开并关闭URL的Bash脚本解决方案
方案1:逐个打开URL,每个停留2秒后关闭
适合依次展示每个URL、每次屏幕仅保留一个窗口的场景,使用轻量级小众浏览器Midori实现:
#!/bin/bash # 参数检查 if [ $# -ne 1 ]; then echo "用法: $0 <文本文件路径>" exit 1 fi # 文件存在检查 if [ ! -f "$1" ]; then echo "错误: 未找到文件 '$1'." exit 1 fi # 循环处理每个URL while read -r link do # 跳过空行 [ -z "$link" ] && continue # 用Midori打开URL并记录进程ID midori "$link" & PID=$! # 停留2秒 sleep 2 # 关闭当前浏览器进程 kill "$PID" 2>/dev/null done < "$1"
说明
- Midori是轻量级开源浏览器,Debian/Ubuntu系可通过
sudo apt install midori安装,其他发行版用对应包管理器即可。 - 可替换
midori为其他小众浏览器(如epiphany、qutebrowser),只要该浏览器打开单个窗口会生成独立进程。 2>/dev/null用于忽略进程已自行关闭的错误提示。
方案2:维持固定数量窗口,定时刷新替换
适合同时展示多个URL、每隔2秒新增一个并关闭最早窗口的场景,实现持续刷新效果:
#!/bin/bash # 参数检查 if [ $# -ne 2 ]; then echo "用法: $0 <文本文件路径> <维持窗口数量>" exit 1 fi FILE="$1" WINDOW_COUNT="$2" # 文件存在检查 if [ ! -f "$FILE" ]; then echo "错误: 未找到文件 '$FILE'." exit 1 fi # 验证窗口数量为正整数 if ! [[ "$WINDOW_COUNT" =~ ^[0-9]+$ ]] || [ "$WINDOW_COUNT" -le 0 ]; then echo "错误: 窗口数量必须是正整数." exit 1 fi # 存储进程ID的数组 declare -a PIDS=() # 循环处理URL(如需重复轮询所有URL,保留外层while true) while true; do while read -r link do [ -z "$link" ] && continue # 打开URL并记录进程ID midori "$link" & PIDS+=("$!") # 窗口数量超限时,关闭最早打开的窗口 if [ "${#PIDS[@]}" -gt "$WINDOW_COUNT" ]; then OLD_PID=${PIDS[0]} kill "$OLD_PID" 2>/dev/null # 移除数组中最早的进程ID PIDS=("${PIDS[@]:1}") fi # 每隔2秒执行一次 sleep 2 done < "$FILE" # 取消下方注释可实现循环重复加载所有URL # echo "完成一轮URL加载,开始下一轮..." # sleep 2 done
说明
- 运行时需指定文本文件路径和要维持的窗口数量,例如
./script.sh urls.txt 5会同时保持5个浏览器窗口。 - 如果使用Chrome/Chromium,需将打开命令改为
google-chrome --new-window "$link" &,关闭时用kill -- -$OLD_PID(杀死整个进程组)。
内容的提问来源于stack exchange,提问作者react_or_angluar
相关产品推荐
相关产品推荐

