2014-12-09 114 views
2

我需要在安装后创建.plist文件,我唯一可以使用的选项是bash脚本。我要创建一个foo.plist为/Library/launchAgents与一个bash脚本,我已经用下面的命令:使用终端或bash脚本创建并写入.plist

cd /Library/launchAgents 
touch foo.plist 

现在我需要将内容写入例如该文件的.plist像这样:

".plist contents" >> foo.plist 

是否有一个命令可以在终端中执行此操作?

+0

你想写入plist的plist内容在哪里?我的意思是你有一份文件列表吗?与他们相应的价值?它们是否在shell变量中?为什么你必须使用'bash',为什么你不能使用编辑器? – 2014-12-09 13:22:59

+0

是的,我有一个工作.plist文件。我需要使用bash,因为安装程序将运行这个bash脚本。因此在安装过程中将该过程自动化为后安装步骤。 – Mubasher 2014-12-10 04:30:52

回答

2

你的问题没有规定得非常好,你已经得到了什么,或者为什么你需要做的是在bash,但如果你必须这样做的,你可以做这样的:

#!/bin/bash 
VERSION=2.12 
cat > foo.plist <<EOF 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>BuildAliasOf</key> 
     <string>ProEditor</string> 
     <key>BuildVersion</key> 
     <value>$VERSION</value> 
</dict> 
</plist> 
EOF 

所以,你把它保存在一个名为Buildplist文件,然后这样做是为了使其可执行

chmod +x Buildplist 

然后运行它通过键入以下:

./Buildplist 

你可以把它直接改变第二行是这样写的plist文件到/Library/launchAgents

cat > /Library/launchAgents/yourApp/yourApp.plist <<EOF 

你可以把它接受的参数了。所以,如果你想通过作者的第一个参数,你可以做这样的:

#!/bin/bash 
VERSION=2.12 
AUTHOR="$1" 
cat > foo.plist <<EOF 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>BuildAliasOf</key> 
     <string>ProEditor</string> 
     <key>BuildVersion</key> 
     <value>$VERSION</value> 
     <author>$AUTHOR</author> 
</dict> 
</plist> 
EOF 

,然后运行

./Buildplist "Freddy Frog" 

通过“弗雷迪青蛙”的作者。

如果你想避免覆盖已经存在任何plist文件,你可以做这样的:

#!/bin/bash 
PLISTFILE="/Library/launchAgents/yourApp/yourApp.plist" 

# If plist already exists, do not overwrite, just exit quietly 
[ -f "$PLISTFILE" ] && exit 

cat > "$PLISTFILE" <<EOF 
... 
... 
EOF 

我把plist文件名中的变量来简化维护,避免键入它两次。

+0

“为什么我必须这样做?”因为我想在我的应用程序安装过程中执行脚本。当安装程序“是DMG”和“PKG”安装程序完成安装时,我需要在最后执行此bash脚本将此.plist文件放在/ Library中。 – Mubasher 2014-12-09 13:38:33

+0

有什么方法可以检查并跳过如果文件已存在?? – Mubasher 2014-12-10 04:34:30

+1

当然可以。最后我添加了一些额外的东西来展示如何做到这一点。请再看一下。 – 2014-12-10 11:08:23

9

PlistBuddy是你想要的。

/usr/libexec/PlistBuddy Info.plist 
File Doesn't Exist, Will Create: Info.plist 

然后添加一个条目,像这样的文件,

/usr/libexec/PlistBuddy -c 'add CFBundleIdenfier string com.tencent.myapp' Info.plist 

顺便说一句,man plistman plutil可以对你有所帮助。