2012-02-02 72 views
0

在我的腳本來編譯我的XCode中的程序,我需要在配置文件從改變字符串,並撤消這一變化使文件空

<string>${NAME}</string>更改爲<string>My New Name</string>

和完成後,重做這個改變。所以這條線的工作:

cat $PLIST | sed "s/\${NAME}/${NEW_NAME}/" > $PLIST 
--> Build my program 
cat $PLIST | sed "s/${NEW_NAME}/\${NAME}/" > $PLIST 

但是,有時我的文件$PLIST是空的!我不知道爲什麼。這是文件保護嗎?我如何強制文件被寫入?

回答

1

聽起來像是一個競爭條件。 cat正在嘗試讀取該文件,但是您的I/O重定向會對其進行破壞。有時它首先被破壞,你會得到一個空文件。如果您使用的是GNU sed,則可以使用-i標誌更改文件。否則,你應該使用一個臨時文件。

EX(GNU):

sed -i -e "s/${NEW_NAME}/\${NAME}/" "$PLIST" 

sed -e "s/${NEW_NAME}/\${NAME}/" "$PLIST" > "${PLIST}.tmp" && mv -f "${PLIST}.tmp" "$PLIST"