更改字符串并撤消此更改使文件为空

时间:2012-02-02 21:13:19

标签: bash xcodebuild build-script

在我的脚本中,我在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 个答案:

答案 0 :(得分: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"