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