如何提取命令结果字符串并在循环中使用它
How to extract string of command result and use it in a loop
运行 nx affected:apps
命令给我这个输出:
> NX NOTE Affected criteria defaulted to --base=master --head=HEAD
> NX Affected apps:
- app-backend
- app-frontend
- app-something
- app-anything
我需要获取所有应用程序名称并再次使用它们进行命令调用。
所以我从那个开始
output=$(nx affected:apps)
echo "$output" | grep -E "^\W+app-(\w+)"
这给了我
- app-backend
- app-frontend
- app-something
- app-anything
但我只需要获取名称而不是 运行 foo --name={appname}
四次。
也不太确定如何在循环中使用它。 bash 脚本的新手:-(
我这里没有 nx
命令,但你可以尝试使用 xargs
:
nx affected:apps | grep '^ -' | cut -d' ' -f4 | xargs -I{} echo docker build -t {} ./dist/{}
删除 echo
以实际 运行 命令。
您可以在 gnu-grep
:
中将 -o
(仅显示匹配项)与 -P
(perl regex moode)一起使用
nx affected:apps |
grep -oP "^\W+app-\K\w+" |
xargs -I {} docker build -t {} .
如果 gnu-grep
不可用,则使用此 awk
命令:
nx affected:apps |
awk -F- '/app-/{print }' |
xargs -I {} docker build -t {} .
您可以使用 --plain
选项:
nx affected:apps --plain
该命令应 return 所有受影响的应用程序,并以 space 作为分隔符。然后,您可以将它们存储到 bash 数组并在 for 循环中循环遍历它们,运行 您需要的命令:
#!/bin/bash
AFFECTED=($(./node_modules/.bin/nx affected:apps --plain))
for t in ${AFFECTED[@]}; do
echo $t
done
运行 nx affected:apps
命令给我这个输出:
> NX NOTE Affected criteria defaulted to --base=master --head=HEAD
> NX Affected apps:
- app-backend
- app-frontend
- app-something
- app-anything
我需要获取所有应用程序名称并再次使用它们进行命令调用。
所以我从那个开始
output=$(nx affected:apps)
echo "$output" | grep -E "^\W+app-(\w+)"
这给了我
- app-backend
- app-frontend
- app-something
- app-anything
但我只需要获取名称而不是 运行 foo --name={appname}
四次。
也不太确定如何在循环中使用它。 bash 脚本的新手:-(
我这里没有 nx
命令,但你可以尝试使用 xargs
:
nx affected:apps | grep '^ -' | cut -d' ' -f4 | xargs -I{} echo docker build -t {} ./dist/{}
删除 echo
以实际 运行 命令。
您可以在 gnu-grep
:
-o
(仅显示匹配项)与 -P
(perl regex moode)一起使用
nx affected:apps |
grep -oP "^\W+app-\K\w+" |
xargs -I {} docker build -t {} .
如果 gnu-grep
不可用,则使用此 awk
命令:
nx affected:apps |
awk -F- '/app-/{print }' |
xargs -I {} docker build -t {} .
您可以使用 --plain
选项:
nx affected:apps --plain
该命令应 return 所有受影响的应用程序,并以 space 作为分隔符。然后,您可以将它们存储到 bash 数组并在 for 循环中循环遍历它们,运行 您需要的命令:
#!/bin/bash
AFFECTED=($(./node_modules/.bin/nx affected:apps --plain))
for t in ${AFFECTED[@]}; do
echo $t
done