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




