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
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
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.