web-dev-qa-db-fra.com

Comment écrire un fichier JSON en utilisant Bash?

Je voudrais écrire un fichier JSON en utilisant BASH mais cela ne semble pas bien fonctionner ..

Mon code:

Sudo echo -e "Name of your app?\n"
Sudo read appname
Sudo cat "{apps:[{name:\"${appname}\",script:\"./cms/bin/www\",watch:false}]}" > process.json

Problème : -bash: process.json: Permission denied

5
tonymx227

De manière générale, ne faites pas ça. Utilisez un outil qui sait déjà citer correctement les valeurs, comme jq:

jq -n --arg appname "$appname" '{apps: [ {name: $appname, script: "./cms/bin/www", watch: false}]}` > process.json

Cela dit, votre problème immédiat est que Sudo applique uniquement la commande, pas la redirection. Une solution de contournement consiste à utiliser tee pour écrire dans le fichier à la place.

echo '{...}' | Sudo tee process.json > /dev/null
8
chepner

Pour générer du texte, utilisez echo plutôt que cat (qui génère des données à partir de fichiers ou de flux).

En plus de cela, vous devrez également échapper les guillemets doubles à l'intérieur de votre texte si vous souhaitez qu'ils apparaissent dans le résultat.

echo -e "Name of your app?\n"
read appname
echo "{apps:[{name:\"${appname}\",script:\"./cms/bin/www\",watch:false}]}" > process.json

Si vous devez traiter plus qu'une simple ligne, j'appuie la suggestion de @ chepner d'utiliser un outil JSON tel que jq.

Votre -bash: process.json: Permission denied vient du fait que vous ne pouvez pas écrire dans le process.json fichier. Si le fichier n'existe pas, vérifiez que votre utilisateur dispose des autorisations d'écriture sur le répertoire. S'il existe, vérifiez que votre utilisateur dispose d'autorisations d'écriture sur le fichier.

5
Aaron