Мой друг указывает, что если вы делаете:
perl -pi.bak -e 's/foo/bar/' somefile
когда «somefile» на самом деле является символической ссылкой, perl делает то, что говорят документы:
Это делается путем переименования входного файла, открытия выходного файла с исходным именем и выбора этого выходного файла в качестве операторов по умолчанию для print (). Расширение, если оно указано, используется для изменения имени старого файла, чтобы сделать резервную копию [...]
В результате получается новая символическая ссылка "somefile.bak", указывающая на неизмененный реальный файл, и новый, измененный обычный файл "somefile" с изменениями.
Во многих случаях следование символической ссылке было бы желательным поведением (даже если оно оставляет правильное расположение файла .bak неоднозначным). Есть ли простой способ сделать это, кроме проверки символических ссылок в оболочке и надлежащего обращения с регистром?
( sed
делает то же самое, для чего это стоит.)
-p -i
в вашем сценарии.