2014-12-09 56 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可以對你有所幫助。