首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell脚本(busybox)在docker容器上不能正常工作

shell脚本(busybox)在docker容器上不能正常工作
EN

Stack Overflow用户
提问于 2021-04-14 18:31:33
回答 1查看 226关注 0票数 0

使用busybox和ash运行基于镜像的高山:

代码语言:javascript
复制
/mnt/builddir/code/src/main/helm # busybox | head -1
BusyBox v1.31.1 () multi-call binary.

我编写了一个sh脚本,仅当文件名以“value”前缀开头时才打印文件名,但带有" if“条件的文件名不能很好地工作。这是我的脚本:

代码语言:javascript
复制
for f in ./*
do
  echo ${f##*/}
  if ${f##*/} == 'values'*; then
      echo $f
  fi
done

输出:

代码语言:javascript
复制
/mnt/builddir/code/src/main/helm # ./script.sh
Chart.yaml
./script.sh: line 4: Chart.yaml: not found
script.sh
./script.sh: line 4: script.sh: not found
values-feature.yaml
./script.sh: line 4: values-feature.yaml: not found
values-int.yaml
./script.sh: line 4: values-int.yaml: not found
values-prod.yaml
./script.sh: line 4: values-prod.yaml: not found
values-stg.yaml
./script.sh: line 4: values-stg.yaml: not found
values.yaml
./script.sh: line 4: values.yaml: not found

在我将代码更改为上面的代码之前,if条件是这样的:

代码语言:javascript
复制
if [[ ${f##*/} == values* ]]
then
    ...

但这也不起作用。

谢谢你的建议...

EN

回答 1

Stack Overflow用户

发布于 2021-04-14 18:47:24

该脚本中有两个明显的问题:在if行中,您没有调用测试(1),而是直接尝试运行每个文件;测试(1) ==操作符只执行精确的字符串比较,而不执行glob或正则表达式匹配。

您可以使用shell case语句将变量与glob匹配:

代码语言:javascript
复制
case "$f" in
  */values*)
    echo "$f"
    ;;
esac

但是外壳for语句可以遍历glob扩展,这通常是一个更简单的设置:

代码语言:javascript
复制
for f in values*; do
  echo "$f"
done

(这完全不是Docker所特有的,我希望您在主机上直接运行该脚本时会遇到非常类似的错误。您可能会发现,没有Docker作为您和您要修复的代码之间的隔离层,开发和调试脚本会容易得多。)

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

https://stackoverflow.com/questions/67089998

复制
相关文章

相似问题

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