我希望使用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: 拒绝访问
一般而言,不要这样做。使用已经知道如何正确引用值的工具,比如 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
false}]}
后面的反引号应该替换为标准引号才能正常工作:
jq -n --arg appname "$appname" '{apps: [ {name: $appname, script: "./cms/bin/www", watch: false}]}' > process.json
- datapug为了输出文本,应该使用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
文件写入内容。如果文件不存在,请检查你的用户在该目录上是否具有写权限。如果文件存在,请检查你的用户是否具有对该文件的写权限。
sudo echo
和sudo read
对我来说看起来毫无意义。 - Tom Fenechsudo vim process.json
时,它可以正常工作... - tonymx227vim
打开文件;使用> process.json
,shell 在sudo
实际运行之前打开文件。 - chepner