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
一般的に言って、これを行わないでください。 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
テキストを出力するには、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
ファイルに書き込むことができないという事実から来ています。ファイルが存在しない場合は、ユーザーにディレクトリへの書き込み権限があることを確認してください。存在する場合は、ユーザーにファイルへの書き込み権限があることを確認してください。