J'essaye d'éditer un fichier json dans un script shell avec le programme jq. Le fichier JSON a le format suivant:Ubuntu Shell Script - Utiliser jq avec des arguments
{
"bla": {
"test1": "True",
"test2": "False"
}
}´
Je veux définir un paramètre pour définir quelle valeur doit être changé de « bla ». Je veux commencer le script par exemple comme ceci:
$ ./myscript.sh test1
Je l'ai essayé comme ceci:
#!/bin/sh
jq --arg v $1 '.pokemon.$v = "True"' filters.json > tmp.$$.json && mv tmp.$$.json filters.json
Mais il ne fonctionne pas. Je reçois l'erreur suivante:
error: syntax error, unexpected '$', expecting IDENT
.pokemon.$v = "True"
^
1 compile error
Quelqu'un sait comment résoudre ce problème?
Citations. '--arg v" $ 1 "', sinon vous n'avez aucune garantie sur le nombre d'arguments séparés à 'jq'' $ 1' par le shell. –
Les PID sont assez prévisibles, ce qui rend le code utilisant le modèle que vous suivez ici vulnérable aux attaques par liens symboliques (par exemple: Si vous utilisez jq comme root et créez '/ tmp/$$ .json', alors quelqu'un d'autre * * peut faire un tas de fichiers '/ tmp/* .json' qui sont des liens symboliques vers'/etc/passwd' et vous causer ainsi, sans le savoir, d'écraser '/ etc/passwd'. Utiliser 'mktemp' te pour créer vos fichiers temporaires n'a pas cette vulnérabilité, ou [la commande' inplace'] (https://github.com/nicowilliams/inplace). –
@CharlesDuffy - 'jq -i' a une histoire torturée. En bref, il a été supprimé, mais sera probablement rétabli un jour. En attendant, «éponge» fonctionne bien pour beaucoup. – peak