ฉันต้องการแก้ไขไฟล์ในสถานที่โดยต่อท้ายบรรทัดเฉพาะในกรณีที่ยังไม่มีหลักฐานของสคริปต์ของฉัน
ปกติฉันจะทำสิ่งที่ชอบ:
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?
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
สำหรับเรื่องนั้น)?