按 space 拆分字符串并循环结果以按破折号拆分

Split string by space and loop result to split by dash

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

domain.com-backend domain.com-frontend

我需要将这个结果写入文件...

nx affected:build --plain > $FILE

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

我想我的尝试语法有误。

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 .

简而言之:结果字符串应存储在文件中,并应调用多个生成的命令。

要启动的示例版本,还有一个 tmp 回显:

#!/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

我有一个类似的解决方案:

# 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