You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Bash循环遍历列表执行Curl触发Jenkins任务报错求助

解决循环执行curl触发Jenkins任务时的"No such file or directory"错误

嗨,我来帮你搞定这个问题!你遇到的这个错误其实是脚本里的引号用法出了问题——你把整个curl命令用双引号包起来了,shell会把这个带空格的完整字符串当成一个命令名称去系统里找,而不是识别成curl命令加上对应的参数。举个例子,你写的"curl -X POST 'http://user:key@x.x.x.xxx:8080/job/$fn/build'",shell会理解成要执行一个名叫curl -X POST 'http://user:key@x.x.x.xxx:8080/job/$fn/build'的程序,系统里肯定没有这个东西,所以才会报"No such file or directory"。

修正后的基础版本

直接去掉curl外面的双引号,同时把URL用双引号包裹,让变量$fn能正确解析:

for fn in `cat jenkins-lists.txt`; do curl -X POST "http://user:key@x.x.x.xxx:8080/job/${fn}/build"; done

更健壮的推荐写法

如果以后你的任务名称里出现空格(虽然现在没有),用for in cat的写法会出问题,推荐用while read循环来处理,稳定性更好:

while IFS= read -r fn; do
    curl -X POST "http://user:key@x.x.x.xxx:8080/job/${fn}/build"
done < jenkins-lists.txt

这里IFS=是为了避免任务名称开头或结尾的空格被截断,-r参数可以防止字符串里的反斜杠被当成转义字符,比直接用cat配合for循环更可靠。

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

火山引擎 最新活动