【问题标题】:bash zip file with version read from file and used in zip file namebash zip 文件,其版本从文件中读取并用于 zip 文件名
【发布时间】:2022-01-08 21:20:09
【问题描述】:

我可以用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

【问题讨论】:

    标签: bash sed zip jq command-substitution


    【解决方案1】:

    build.zip 替换为"build_$(cat manifest.json | jq -r .version).zip"

    更新:

    build.zip 替换为"build_$(jq -r .version manifest.json).zip"

    【讨论】:

    • cat 也是不需要的。
    【解决方案2】:
    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" ...
    

    让我们摆脱@​​987654329@的无用用法。

    zip "build_$( jq .version manifest.json | sed s/\"//g ).zip" ...
    

    最后,我们可以使用 --raw-output aka -r,而不是尝试将 JSON 文字转换为它使用 sed 生成的字符串。

    zip "build_$( jq -r .version manifest.json ).zip" ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2016-06-15
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多