Un de mes amis fait remarquer que si vous le faites:
perl -pi.bak -e 's/foo/bar/' somefile
quand "somefile" est en fait un lien symbolique, perl fait exactement ce que les docs disent qu'il fera:
Il le fait en renommant le fichier d'entrée, en ouvrant le fichier de sortie par le nom d'origine et en sélectionnant ce fichier de sortie par défaut pour les instructions print (). L'extension, si fournie, permet de modifier le nom de l'ancien fichier pour en faire une copie de sauvegarde [...]
Ce qui entraîne un nouveau lien symbolique "somefile.bak" pointant vers le fichier réel inchangé, et un nouveau fichier régulier modifié "somefile" avec les modifications.
Dans de nombreux cas, suivre le lien symbolique serait le comportement souhaité (même s'il laisse ambigu l'emplacement correct du fichier .bak). Existe-t-il un moyen simple de le faire autre que de tester les liens symboliques dans un wrapper et de gérer le cas de manière appropriée?
( sed
fait la même chose, pour ce que ça vaut.)
-p -i
dans votre script.