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