web-dev-qa-db-ja.com

Bashを使用してJSONファイルを書き込む方法は?

BASHを使用してJSONファイルを書きたいのですが、うまく動作しないようです。

私のコード:

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

問題 : -bash: process.json: Permission denied

5
tonymx227

一般的に言って、これを行わないでください。 jqのように、値を正しく引用する方法をすでに知っているツールを使用します。

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

とはいえ、当面の問題は、Sudoがリダイレクトではなくコマンドのみを適用することです。回避策の1つは、代わりにteeを使用してファイルに書き込むことです。

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

テキストを出力するには、echo(ファイルまたはストリームからデータを出力する)ではなくcatを使用します。

それとは別に、結果に表示したい場合は、テキスト内の二重引用符もエスケープする必要があります。

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

単純な行以上のものを処理する必要がある場合は、jqなどのJSONツールを使用するという@chepnerの提案に2番目です。

あなたの-bash: process.json: Permission deniedは、process.jsonファイルに書き込むことができないという事実から来ています。ファイルが存在しない場合は、ユーザーにディレクトリへの書き込み権限があることを確認してください。存在する場合は、ユーザーにファイルへの書き込み権限があることを確認してください。

5
Aaron