Измените строку и отмените это изменение, сделав файл пустым - PullRequest
0 голосов
/ 03 февраля 2012

В моем скрипте для компиляции моей программы в 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 Ответ

1 голос
/ 03 февраля 2012

Похоже на состояние гонки.cat пытается прочитать файл, но ваше перенаправление ввода / вывода затормаживает его.Иногда он забивается первым, и вы получаете пустой файл.Если вы используете 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"
...