2016-10-06 6 views
2

Я хотел бы написать файл 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

+1

Проверьте, есть ли у вас разрешение на создание файла в указанном месте? –

+1

'sudo echo' и' sudo read' на первых двух строках выглядят совершенно бессмысленными –

+0

Когда я делаю 'sudo vim process.json', он работает ... – tonymx227

ответ

4

Для вывода текст, используйте echo, а не cat (который выводит данные из файлов или потоков).

Кроме того, вам также придется избегать двойных кавычек внутри вашего текста, если вы хотите, чтобы они появлялись в результате.

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

Если необходимо обработать более, чем просто строки, я второй @ предложение chepner, чтобы использовать инструмент JSON, такую ​​как jq.

Ваш -bash: process.json: Permission denied исходит из того факта, что вы не можете написать файл process.json. Если файл не существует, убедитесь, что у пользователя есть права на запись в каталоге. Если он существует, убедитесь, что у пользователя есть права на запись в файл.

+0

Спасибо, что это работает. – tonymx227

+1

@ tonymx227 если это исправлено, рассмотрите вопрос о принятии решения Аарона. – Alos

5

Вообще-то, не делайте этого. Используйте инструмент, который уже знает, как правильно цитировать значения, как jq:

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

Тем не менее, ваши непосредственные проблемы является то, что sudo применяется только команда, а не перенаправление. Одним из способов является использование tee для записи в файл вместо этого.

echo '{...}' | sudo tee process.json > /dev/null