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

Dockerfile运行Shell脚本报错:sleep命令识别无效时间间隔‘20s\r’

解决Shell脚本中sleep命令的换行符错误问题

这个报错的根源很明确:你的SqlCmdStartup.sh脚本使用了Windows风格的CRLF换行符,而Linux环境只识别LF换行符。当脚本在Linux容器里执行时,sleep 20s后面的\r(回车符)会被当成参数的一部分,变成sleep 20s\r,从而触发"invalid time interval"的错误。

下面是几种快速解决的方法:

1. 本地转换脚本换行符

如果是在Windows上编辑的脚本,可以用编辑器直接转换:

  • Notepad++:打开脚本后,点击「编辑」→「文档格式转换」→「转为Unix(LF)」
  • VS Code:右下角点击当前换行符标识(比如「CRLF」),选择「LF」保存即可

如果是在Linux/macOS环境下,也可以用命令行工具转换:

  • 用dos2unix工具:
    dos2unix SqlCmdStartup.sh
    
  • 没有dos2unix的话,用sed命令替换掉所有行尾的\r:
    sed -i 's/\r$//' SqlCmdStartup.sh
    

2. 在Docker构建阶段处理

为了避免本地环境的影响,可以直接在Dockerfile里添加转换步骤,确保脚本在容器里是Linux兼容格式:
修改你的Dockerfile里的RUN命令:

RUN sed -i 's/\r$//' ./SqlCmdStartup.sh && chmod +x ./SqlCmdStartup.sh

这样不管本地脚本是什么换行格式,构建镜像时都会自动转为LF,从根源避免问题。

3. 长期预防措施

  • 把编辑器的默认换行符设置为LF,这样新建的脚本默认就是Linux兼容格式
  • 如果用Git管理代码,设置core.autocrlf配置:
    • Linux/macOS用户:git config --global core.autocrlf input
    • Windows用户:git config --global core.autocrlf false(避免Git自动把LF转为CRLF)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:45:02