जब आप किसी फ़ाइल को लिखने के लिए खोलते हैं >
, तो उसे पढ़ने से पहले ही काट दिया जाता है। इसलिए यह खाली है।
एक अस्थायी फ़ाइल के साथ वैकल्पिक (हाँ, यह काफी सामान्य है):
php -r "…" < build/index.php > tmp
mv tmp build/index.php
आदर्श रूप से, mktemp
एक अद्वितीय अस्थायी फ़ाइल बनाने के लिए उपयोग करें:
tmp="$(mktemp /tmp/file.XXX)"
php -r "…" < build/index.php > "$tmp"
mv "$tmp" build/index.php
लेकिन यह वास्तव में कम या अधिक संक्षिप्त नहीं है।
मेरी व्यक्तिगत पसंदीदा moreutilssponge
से उपयोगिता है - यह इनपुट पढ़ता है और फिर फ़ाइल में लिखता है:
php -r "…" < build/index.php | sponge build/index.php
या, बेहतर अभी तक, PHP में प्रतिस्थापन न करें, लेकिन एक उपकरण जो इन-प्लेस संपादन का समर्थन करता है, जैसे पर्ल के साथ:
perl -pi -e '…' build/index.php
इसी प्रकार sed
, यहाँ GNU के लिए इन-फ्लैग झंडा है sed
:
sed -i -e '…' build/index.php
और बीएसडी के लिए sed
, आपको इसके लिए एक स्पष्ट खाली तर्क चाहिए -i
:
sed -i '' -e '…' build/index.php
आपको संभवतः पर्ल और सेड के सिंटैक्स के लिए अपनी नियमित अभिव्यक्ति / प्रतिस्थापन कमांड को क्रमशः अनुकूलित करना होगा।