add-apt-repository在Shell脚本中执行超时,手动运行正常的问题求助
问题排查与解决
核心原因
你遇到的问题大概率是**add-apt-repository默认需要交互确认**,而脚本运行时处于非交互环境,命令会一直等待用户输入,最终被timeout 20判定为超时失败,触发重试逻辑。而手动执行时你会手动确认,所以能正常完成。
解决方案
给add-apt-repository添加-y参数,自动跳过确认步骤:
retry timeout 20 add-apt-repository -y \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
其他可能的排查点
如果添加-y后问题依旧,可以检查以下几点:
- 确认
lsb_release -cs在sudo环境下能正确输出当前Ubuntu版本代号(比如jammy、noble),可以在脚本里先打印该值验证:echo "Ubuntu codename: $(lsb_release -cs)" - 检查
timeout命令的行为:Ubuntu默认使用GNU timeout,确保没有混用busybox版本(可以用timeout --version确认) - 验证网络连通性:脚本运行时的网络环境是否和手动执行一致,比如是否有代理差异(sudo可能不会继承当前用户的代理环境变量)
内容的提问来源于stack exchange,提问作者HarelDanieli
相关产品推荐
相关产品推荐

