首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sh中读取文件时,while循环不起作用

在sh中读取文件时,while循环不起作用
EN

Stack Overflow用户
提问于 2019-10-25 03:29:08
回答 1查看 298关注 0票数 0

我在Jenkinsfile中部署了以下shell脚本

代码语言:javascript
复制
withEnv(['PATH+EXTRA=/busybox:/kaniko']) {
  sh """#!/busybox/sh
    cat "images2.txt"
    cat "images2.txt" | while read line || [ -n "\$line" ]; do
      fields=(\$line)
      echo "FROM \${fields[0]}" | /kaniko/executor --dockerfile /dev/stdin --destination \${fields[1]}
    done
"""
}

我必须转义$,因为它在Jenkinsfile中,否则Groovy不会期望它。

images2.txt的内容包括:

代码语言:javascript
复制
docker.io/prom/blackbox-exporter:v0.14.0 eu.gcr.io/development/infra/monitoring/blackbox-exporter:v0.14.0
docker.io/busybox:1.30.0 eu.gcr.io/development/infra/monitoring/busybox:1.30.0

当管道运行时,我得到错误

代码语言:javascript
复制
/home/jenkins/agent/workspace/test-job@tmp/durable-9cce3aab/script.sh: line 4: syntax error: unexpected "(" (expecting "done")

我也尝试过这样做

代码语言:javascript
复制
sh """#!/busybox/sh
input="images2.txt"
while IFS= read -r line
  do
    fields=(\$line)
    echo "FROM \${fields[0]}" | /kaniko/executor --dockerfile /dev/stdin --destination \${fields[1]}
  done < "\$input" 
"""

但结果是一样的。知道这里可能出了什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2019-10-25 04:02:41

根据@Charles Duffy的建议,我实现了

代码语言:javascript
复制
sh """#!/busybox/sh
cat "images2.txt" | while read field1 field2 rest; do
  echo "FROM \$field1" | /kaniko/executor --dockerfile /dev/stdin --destination \$field2
done
""" 

而且它工作得很完美。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58548013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档