使用bash编写JSON文件

ton*_*227 5 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
Run Code Online (Sandbox Code Playgroud)

问题 : -bash: process.json: Permission denied

che*_*ner 7

一般来说,不要这样做.使用已经知道如何正确引用值的工具,例如jq:

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

也就是说,您的直接问题是sudo仅应用命令,而不是重定向.一种解决方法是使用tee写入文件.

echo '{...}' | sudo tee process.json > /dev/null
Run Code Online (Sandbox Code Playgroud)


Aar*_*ron 5

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

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

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

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

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