使用bash编写JSON文件

时间:2016-10-06 12:26:04

标签: linux bash pm2

我想使用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

2 个答案:

答案 0 :(得分:5)

要输出文字,请使用echo而不是cat(从文件或流中输出数据)。

除此之外,如果您希望它们出现在结果中,您还必须转义文本中的双引号。

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

如果您需要处理的不仅仅是一个简单的行,我第二个@chepner的建议是使用jq等JSON工具。

您的-bash: process.json: Permission denied来自您无法写入process.json文件的事实。如果该文件不存在,请检查您的用户是否具有该目录的写入权限。如果存在,请检查您的用户是否对该文件具有写入权限。

答案 1 :(得分: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