【问题标题】:Split string by space and loop result to split by dash按空格分割字符串,循环结果按破折号分割
【发布时间】:2020-09-14 20:25:15
【问题描述】:

nx affected:build --plain 命令给了我单行输出

domain.com-backend domain.com-frontend

我需要将此结果写入文件...

nx affected:build --plain > $FILE

...但我还需要将内容拆分为元素(按空格拆分)并将每个元素拆分为 domainapp(按破折号拆分)以生成多个 docker build 命令。

我猜我的尝试语法错误。

while IFS=' ' read -r element; do
    while IFS='-' read -r domain app; do
        echo docker build -t "$domain-$app" -f "apps/$domain/$app/Dockerfile" . # echo will be removed later
    done
done < $FILE

所以代码应该为示例输出两个命令:

docker build -t domain.com-backend -f apps/domain.com/backend/Dockerfile .
docker build -t domain.com-frontend -f apps/domain.com/frontend/Dockerfile .

简单总结:结果字符串应存储在文件中,并应导致调用多个生成的命令。

【问题讨论】:

    标签: bash shell sh


    【解决方案1】:

    开始的示例版本,还有一个 tmp echo:

    #!/bin/bash
    
    outfile=./xyz.txt
    info=($(nx affected:build --plain | tee $outfile))
    
    for item in "${info[@]}"; do
        fb=${item##*-}
        echo docker build -t "$item" -f apps/domain.com/$fb/Dockerfile .
    done
    

    更新:

    #!/bin/bash
    
    outfile=./xyz.txt
    info=($(nx affected:build --plain | tee $outfile))
    
    for item in "${info[@]}"; do
        dom=${item%-*}
        fb=${item##*-}
        echo docker build -t "$item" -f apps/$dom/$fb/Dockerfile .
    done
    

    【讨论】:

    • 如何获取域和应用变量?您对域进行了硬编码...
    【解决方案2】:

    我有类似的解决方案:

    # instead of echo you can place your command (nx affected:build --plain)
    data=`echo "domain.com-backend domain.com-frontend"`
    
    IFS=' '
    for part in $data
    do
        while IFS='-' read -r domain app; do
            echo "docker build -t $domain-$app -f apps/$domain/$app/Dockerfile ."
        done <<< $part
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-31
      • 2013-10-11
      • 2018-03-22
      • 2011-05-19
      • 2016-12-17
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多