Tôi muốn chỉnh sửa một tập tin tại chỗ bằng cách nối thêm một dòng, chỉ khi chưa tồn tại để làm cho kịch bản của tôi chống đạn.
Thông thường tôi sẽ làm một cái gì đó như:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
Cũng có thể thực hiện thông qua ansible ( line
+ insertafter=EOF
+ regexp
), nhưng đó là một câu chuyện khác.
Trong vi / ex tôi có thể làm một cái gì đó như:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
nhưng sau đó làm thế nào để tôi kiểm tra xem dòng đã có ở đó chưa (và do đó không làm gì) một cách lý tưởng mà không lặp lại cùng một dòng?
Hoặc có thể có một số cách dễ dàng hơn để làm điều đó trong trình soạn thảo Ex?
ex ~/.bashrc -c "if search('export PATH=\~\/.composer\/vendor\/bin:\$PATH')>0 | norm quit | endif | norm Aexport PATH=~/.composer/vendor/bin:$PATH"
export
là một lệnh , vì vậy phần còn lại của dòng là một từ shell, KHÔNG phải là một bài tập. Do đó, không giống như một phép gán biến (không sử dụng export
), bạn cần dấu ngoặc kép hoặc nó sẽ bị hỏng trên khoảng trắng . Ngoài ra, hãy xem Cách thêm chính xác đường dẫn đến PATH .
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...
(hoặccat
, cho vấn đề đó)?