Um amigo meu ressalta que, se você fizer:
perl -pi.bak -e 's/foo/bar/' somefile
quando "somefile" é na verdade um link simbólico, o perl faz exatamente o que os documentos dizem que fará:
Isso é feito renomeando o arquivo de entrada, abrindo o arquivo de saída pelo nome original e selecionando esse arquivo de saída como o padrão para instruções print (). A extensão, se fornecida, é usada para modificar o nome do arquivo antigo e fazer uma cópia de backup.
O que resulta em um novo link simbólico "somefile.bak" apontando para o arquivo real inalterado e um novo arquivo regular alterado "somefile" com as alterações.
Em muitos casos, seguir o link simbólico seria o comportamento desejado (mesmo que ele deixe o local correto do arquivo .bak ambíguo). Existe uma maneira simples de fazer isso, além de testar links simbólicos em um wrapper e manipular o caso adequadamente?
( sed
faz a mesma coisa, pelo que vale a pena.)
-p -i
em seu script.