在我的脚本中,我在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
是空的!我不知道为什么。这是文件保护吗?如何强制写入文件?
答案 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"