如何在Jenkins中自动通过imx-setup-release.sh的EULA确认?
解决Yocto构建脚本imx-setup-release.sh的EULA自动确认问题
问题分析
运行. ./imx-setup-release.sh -b build_dir时,脚本会先通过分页工具(如less)展示EULA协议,需要先按q退出分页,再输入y完成确认。直接用yes | . ./imx-setup-release.sh无效,因为分页工具默认从终端读取输入,而非标准输入,yes输出的y无法被分页工具识别,导致脚本一直卡在分页界面。
可行解决方案
方案1:使用expect脚本(最可靠)
expect专门用于处理交互式命令场景,能精准匹配脚本输出并发送对应输入:
expect -c ' spawn . ./imx-setup-release.sh -b build_dir expect { # 匹配分页退出提示,发送q并继续等待 "Press Q to exit" { send "q\r"; exp_continue } # 匹配确认提示,发送y "Do you accept the EULA you just read? (y/n)" { send "y\r" } } expect eof '
如果系统没有expect,需要先安装(如Debian/Ubuntu用sudo apt install expect,RHEL/CentOS用sudo yum install expect)。
方案2:使用printf结合管道(部分场景可用)
如果脚本的分页工具支持从标准输入读取命令,可以尝试用printf依次发送q和y:
printf "q\ny\n" | . ./imx-setup-release.sh -b build_dir
注意:此方法仅在分页工具(如less)未强制绑定终端输入时有效,若脚本里的分页命令加了-f或其他强制终端的参数,该方法会失效。
补充说明
- 不要用
yes命令:它只会持续输出y,无法处理分页工具需要的q输入,导致脚本无限等待终端输入。 - 若在Jenkins中执行,确保构建环境已安装
expect(或确认方案2可行),直接将对应命令写入Jenkins构建步骤即可。
内容的提问来源于stack exchange,提问作者RhoAies
相关产品推荐
相关产品推荐

