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

Globbing模式在脚本中正常但经at命令调度后失效的问题

问题解决:at命令调度Bash脚本时大括号扩展失效

问题现象

编写的Bash脚本直接运行时能正常批量创建100个文件,但通过at命令调度执行后,仅生成一个名为file{1..100}.txt的文件。

脚本代码:

#!/bin/bash

mkdir folder1

touch folder1/file{1..100}.txt

调度执行后的输出:

stevis@stevis:~/Desktop/Linux/bash/scheduling$ ls folder1/
file{1..100}.txt

问题原因

at命令默认使用系统的sh shell执行任务,而sh不支持Bash特有的大括号序列扩展({1..N})语法,因此会把整个file{1..100}.txt当作单个文件名处理,而非展开为100个不同的文件名。

解决方案

方案1:提交at任务时指定用Bash执行脚本

提交任务时明确指定调用bash运行脚本,替代at默认的sh:

# 方法1:通过管道传递命令给at
echo "bash /home/stevis/Desktop/Linux/bash/scheduling/your_script.sh" | at now +1min

# 方法2:进入at交互模式后输入命令
at now +1min
# 输入以下内容后按Ctrl+D结束
bash /home/stevis/Desktop/Linux/bash/scheduling/your_script.sh

方案2:修改脚本兼容POSIX shell(sh)

如果希望脚本在sh环境下也能正常工作,将大括号扩展替换为for循环+seq命令的方式:

#!/bin/bash

mkdir folder1

# 用循环替代大括号扩展,兼容sh
for i in $(seq 1 100); do
    touch folder1/file${i}.txt
done

这样无论直接运行还是通过at调度,都能正确生成100个文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:20:45