将两个命令合并在一起
Merging two commands together
我目前正在使用以下方法从我的 git 标签中获取最新版本:
git fetch --tags; git tag -l | awk -F'[/]' '{print }' | sort | tail -1 | awk -F. -v OFS=. '{$NF += 1 ; print}'
其中returns一个版本如1.0.0
.
然后我使用以下更新版本:
ls *.yml | awk -F'[.]' '{print "/1.0.0"}' | xargs -L 1 -I@ bash -c 'git tag -m @ @'; git push --tags
如何将第一个命令的输出自动传递到第二个命令,这样我就不必手动更改 1.0.0?
我试过:
git tag -l | awk -F'[/]' '{print }' | sort | tail -1 | awk -F. -v OFS=. '{$NF += 1 ; print}' | read version; ls *.yml | awk -F'[.]' '{print "/" $version}' | xargs -L 1 -I@ bash -c 'echo @'
但它没有用(可能是因为分叉?)
| read version
产生一个子 shell 并将 stdin 存储在变量 version
中,但随后管道结束,子 shell 关闭,并且(在子 shell 中进行的)赋值被丢弃;一般问题是子 shell 中的分配没有传递到 calling/parent 进程。
使用 OP 当前代码的一个想法:
version=$(git tag -l | awk -F'[/]' '{print }' | sort | tail -1 | awk -F. -v OFS=. '{$NF += 1 ; print}')
ls *.yml | awk -F'[.]' -v ver="${version}" '{print "/" ver}' | xargs -L 1 -I@ bash -c 'echo @'
备注:
- 我假设 OP 的当前代码可以正常工作;这里的 objective 只是为了捕获 top-level 的版本并使其可用于 follow-on
awk
- 可能有更有效的方法来提取和更新版本字符串,但需要查看
get tag-l
的输出和一些 *.yml
文件的示例内容(如果 OP 想进一步调查这个那么应该问一个新问题)
您可以使用命令的结果,使用 $(...)
,您可以从这个例子中看到:
开始于:
如何进行计算? ($(( ... ))
的用法)
Prompt> echo $((3 * 2))
命令示例,结果为数字:
Prompt> cat Analyse.txt | wc -l
1337
在计算中使用该结果:
Prompt> echo $(($(cat Analyse.txt | wc -l) * 2))
2674
但是:你的获取版本号的命令很复杂,使用那个版本号的命令也很大,所以两者的结合可能会使你的脚本变得非常混乱和难以理解(并且无法维护),所以您可能会选择 mark.
的答案
我目前正在使用以下方法从我的 git 标签中获取最新版本:
git fetch --tags; git tag -l | awk -F'[/]' '{print }' | sort | tail -1 | awk -F. -v OFS=. '{$NF += 1 ; print}'
其中returns一个版本如1.0.0
.
然后我使用以下更新版本:
ls *.yml | awk -F'[.]' '{print "/1.0.0"}' | xargs -L 1 -I@ bash -c 'git tag -m @ @'; git push --tags
如何将第一个命令的输出自动传递到第二个命令,这样我就不必手动更改 1.0.0?
我试过:
git tag -l | awk -F'[/]' '{print }' | sort | tail -1 | awk -F. -v OFS=. '{$NF += 1 ; print}' | read version; ls *.yml | awk -F'[.]' '{print "/" $version}' | xargs -L 1 -I@ bash -c 'echo @'
但它没有用(可能是因为分叉?)
| read version
产生一个子 shell 并将 stdin 存储在变量 version
中,但随后管道结束,子 shell 关闭,并且(在子 shell 中进行的)赋值被丢弃;一般问题是子 shell 中的分配没有传递到 calling/parent 进程。
使用 OP 当前代码的一个想法:
version=$(git tag -l | awk -F'[/]' '{print }' | sort | tail -1 | awk -F. -v OFS=. '{$NF += 1 ; print}')
ls *.yml | awk -F'[.]' -v ver="${version}" '{print "/" ver}' | xargs -L 1 -I@ bash -c 'echo @'
备注:
- 我假设 OP 的当前代码可以正常工作;这里的 objective 只是为了捕获 top-level 的版本并使其可用于 follow-on
awk
- 可能有更有效的方法来提取和更新版本字符串,但需要查看
get tag-l
的输出和一些*.yml
文件的示例内容(如果 OP 想进一步调查这个那么应该问一个新问题)
您可以使用命令的结果,使用 $(...)
,您可以从这个例子中看到:
开始于:
如何进行计算? ($(( ... ))
的用法)
Prompt> echo $((3 * 2))
命令示例,结果为数字:
Prompt> cat Analyse.txt | wc -l
1337
在计算中使用该结果:
Prompt> echo $(($(cat Analyse.txt | wc -l) * 2))
2674
但是:你的获取版本号的命令很复杂,使用那个版本号的命令也很大,所以两者的结合可能会使你的脚本变得非常混乱和难以理解(并且无法维护),所以您可能会选择 mark.
的答案