Set a value in place with jq
19 Jul 2021 in TIL
I recently needed to set a value in a JSON file. Using jq
I can do this by setting the value directly like so:
bash
jq '.scripts.build = "npx @vercel/ncc build && npx convert-action"' package.json
However, this returns the file contents rather than editing the file in place. To update a file's contents without a temporary file you need to use cat
and a sub-shell:
bash
cat <<< "$(jq '.scripts.build = "npx @vercel/ncc build && npx convert-action"' package.json)" > package.json
This will set .scripts.build
in package.json
in-place.
I discovered this whilst contributing to build-and-tag-action