Lorsque vous ouvrez un fichier en écriture >
, celui-ci est tronqué avant même de le lire. C'est pourquoi c'est vide.
Alternative avec un fichier temporaire (oui, c'est assez courant):
php -r "…" < build/index.php > tmp
mv tmp build/index.php
Idéalement, utilisez mktemp
pour générer un fichier temporaire unique:
tmp="$(mktemp /tmp/file.XXX)"
php -r "…" < build/index.php > "$tmp"
mv "$tmp" build/index.php
Mais ce n'est pas vraiment plus court ou plus concis.
Mon favori personnel est l’ sponge
utilitaire de moreutils - il lit les entrées puis écrit dans le fichier:
php -r "…" < build/index.php | sponge build/index.php
Ou, mieux encore, ne faites pas la substitution en PHP, mais un outil qui supporte l'édition sur place, comme Perl avec:
perl -pi -e '…' build/index.php
Similaire avec sed
, ici, le drapeau en place pour GNU sed
:
sed -i -e '…' build/index.php
Et pour BSD sed
, vous avez besoin d'un argument vide explicite pour -i
:
sed -i '' -e '…' build/index.php
Vous devrez probablement adapter votre commande expression régulière / substitution à la syntaxe de Perl et de sed, respectivement.