Wenn Sie eine Datei zum Schreiben öffnen >
, wird sie abgeschnitten, bevor Sie sie überhaupt lesen. Deshalb ist es leer.
Alternative mit temporärer Datei (ja, das ist durchaus üblich):
php -r "…" < build/index.php > tmp mv tmp build/index.php
Idealerweise mktemp
generieren Sie eine eindeutige temporäre Datei:
tmp="$(mktemp /tmp/file.XXX)" php -r "…" < build/index.php > "$tmp" mv "$tmp" build/index.php
Das ist aber nicht wirklich kürzer oder prägnanter.
Mein persönlicher Favorit ist das sponge
Dienstprogramm von moreutils - es liest die Eingabe und schreibt dann in die Datei:
php -r "…" < build/index.php | sponge build/index.php
Oder besser noch, ersetzen Sie nicht in PHP, sondern ein Tool, das die direkte Bearbeitung unterstützt, wie Perl mit:
perl -pi -e '…' build/index.php
Ähnlich wie sed
hier die In-Place-Flagge für GNU sed
:
sed -i -e '…' build/index.php
Und für BSD sed
benötigen Sie ein explizit leeres Argument für -i
:
sed -i '' -e '…' build/index.php
Sie müssen Ihren regulären Ausdruck / Substitutionsbefehl wahrscheinlich an die Syntax von Perl und Sed anpassen.