bash zip 文件,其版本从文件中读取并在 zip 文件名中使用
bash zip file with version read from file and used in zip file name
我可以用 zip
压缩一堆文件
$ zip build.zip src/*.js src/assets/icons/*.png *.json
updating: src/addReactionsNav.js (deflated 65%)
updating: manifest.json (deflated 55%)
updating: src/assets/icons/icon_128.png (stored 0%)
updating: src/assets/icons/icon_16.png (stored 0%)
updating: src/assets/icons/icon_256.png (deflated 0%)
updating: src/assets/icons/icon_48.png (stored 0%)
但我想将其自动化,以便 zip 的名称包含版本。想到这样做:
$ echo "build_$(cat manifest.json | jq .version).zip" | sed s/\"//g
build_1.1.0.zip
但不知道如何将两者“管道化”在一起。
解决方案
感谢@cyrus
zip "build_$(jq -r .version manifest.json).zip" src/*.js src/assets/icons/*.png *.json
将 build.zip
替换为 "build_$(cat manifest.json | jq -r .version).zip"
。
更新:
将 build.zip
替换为 "build_$(jq -r .version manifest.json).zip"
。
zip "build_$( jq -r .version manifest.json ).zip" ...
要将一个程序的输出包含在另一个程序的命令行中,可以使用 $(...)
.
zip "$( echo "build_$( cat manifest.json | jq .version ).zip" | sed s/\"//g )" ...
这是您问题的答案,但您可以彻底清理它。
对于初学者,我们可以将反引号移动到内部 $()
。
zip "$( echo "build_$( cat manifest.json | jq .version | sed s/\"//g ).zip" )" ...
echo "$( ... )"
实际上只是 ...
.
zip "build_$( cat manifest.json | jq .version | sed s/\"//g ).zip" ...
让我们摆脱无用的 cat
。
zip "build_$( jq .version manifest.json | sed s/\"//g ).zip" ...
最后,我们可以使用 --raw-output
又名 -r
.[=24=,而不是尝试将 JSON 文字转换成它使用 sed
生成的字符串]
zip "build_$( jq -r .version manifest.json ).zip" ...
我可以用 zip
$ zip build.zip src/*.js src/assets/icons/*.png *.json
updating: src/addReactionsNav.js (deflated 65%)
updating: manifest.json (deflated 55%)
updating: src/assets/icons/icon_128.png (stored 0%)
updating: src/assets/icons/icon_16.png (stored 0%)
updating: src/assets/icons/icon_256.png (deflated 0%)
updating: src/assets/icons/icon_48.png (stored 0%)
但我想将其自动化,以便 zip 的名称包含版本。想到这样做:
$ echo "build_$(cat manifest.json | jq .version).zip" | sed s/\"//g
build_1.1.0.zip
但不知道如何将两者“管道化”在一起。
解决方案
感谢@cyrus
zip "build_$(jq -r .version manifest.json).zip" src/*.js src/assets/icons/*.png *.json
将 build.zip
替换为 "build_$(cat manifest.json | jq -r .version).zip"
。
更新:
将 build.zip
替换为 "build_$(jq -r .version manifest.json).zip"
。
zip "build_$( jq -r .version manifest.json ).zip" ...
要将一个程序的输出包含在另一个程序的命令行中,可以使用 $(...)
.
zip "$( echo "build_$( cat manifest.json | jq .version ).zip" | sed s/\"//g )" ...
这是您问题的答案,但您可以彻底清理它。
对于初学者,我们可以将反引号移动到内部 $()
。
zip "$( echo "build_$( cat manifest.json | jq .version | sed s/\"//g ).zip" )" ...
echo "$( ... )"
实际上只是 ...
.
zip "build_$( cat manifest.json | jq .version | sed s/\"//g ).zip" ...
让我们摆脱无用的 cat
。
zip "build_$( jq .version manifest.json | sed s/\"//g ).zip" ...
最后,我们可以使用 --raw-output
又名 -r
.[=24=,而不是尝试将 JSON 文字转换成它使用 sed
生成的字符串]
zip "build_$( jq -r .version manifest.json ).zip" ...