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