मैं किसी पंक्ति को जोड़कर किसी फ़ाइल को इन-प्लेस करना चाहता / चाहती हूं, अगर मेरी स्क्रिप्ट बुलेट-प्रूफ बनाने के लिए अभी तक मौजूद नहीं है।
आम तौर पर मैं ऐसा कुछ करता हूँ:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
यह भी संभव है कि इसे ansible ( line
+ insertafter=EOF
+ regexp
) के माध्यम से किया जाए , लेकिन यह एक और कहानी है।
Vi / ex में मैं कुछ ऐसा कर सकता था:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
लेकिन फिर मैं कैसे जांचूं कि क्या लाइन पहले से ही है (और इस तरह कुछ भी नहीं) आदर्श रूप से एक ही लाइन को दोहराए बिना?
या शायद पूर्व संपादक में ऐसा करने के लिए कुछ आसान तरीका है?
ex ~/.bashrc -c "if search('export PATH=\~\/.composer\/vendor\/bin:\$PATH')>0 | norm quit | endif | norm Aexport PATH=~/.composer/vendor/bin:$PATH"
export
एक कमांड है , इसलिए शेष पंक्ति एक शेल शब्द है, असाइनमेंट नहीं है। इसलिए एक चर असाइनमेंट (जो उपयोग नहीं करता है export
) के विपरीत , आपको दोहरे उद्धरण चिह्नों की आवश्यकता है या यह व्हाट्सएप पर टूट जाएगा । यह भी देखें कि कैसे सही ढंग से पथ में एक रास्ता जोड़ सकते हैं ।
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...
(याcat
, उस बात के लिए)?