Cách nối nhiều dòng vào một tệp bằng bash, với - - trước chuỗi


9

Câu hỏi rất giống với Cách nối nhiều dòng vào một tệp bằng bash nhưng tôi muốn bắt đầu tệp với --, và cũng có thể nối thêm vào tệp, nếu có thể.

printf "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

Vấn đề đang bắt đầu tập tin với "-" cho tôi một:

-bash: printf: --: invalid option
printf: usage: printf [-v var] format [arguments]

Có cách nào để thoát khỏi --? Có sự thay thế nào không? Tôi không chắc chắn cách thực hiện nhiều dòng bằng cách sử dụng echocatkhông phải là một lựa chọn tốt, tôi muốn có nó trong một tập lệnh tự động.

Câu trả lời:


17

Hầu hết các lệnh chấp nhận --foodưới dạng tùy chọn cũng tự chấp nhận --là điểm đánh dấu "kết thúc tùy chọn, bắt đầu đối số" - vì vậy bạn có thể thực hiện:

printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

Nhưng câu trả lời cụ thể hơn cho ví dụ chính xác của bạn là đối số đầu tiên cho printf là một công cụ xác định định dạng và bạn đang làm mọi thứ trở nên khó khăn hơn mức cần thiết bằng cách không sử dụng printf cho khả năng định dạng của nó. Đây sẽ là một cách tốt hơn để làm những gì bạn muốn:

printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test

Điều đó nói với printf lấy từng đối số mà nó nhận được và in nó, theo sau là một dòng mới. Dễ dàng hơn việc lặp lại \nchính mình, và nó tránh được --vấn đề hàng đầu mà bạn đang gặp phải. Và nó loại bỏ sự cần thiết phải thoát khỏi bất kỳ %dấu hiệu nào mà chuỗi của bạn có thể chứa.

Về cách thực hiện nhiều dòng với echo, bạn có thể sử dụng:

echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

Hoặc, nhiều hơn nữa:

{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test

Hoặc sử dụng mèo cùng với tài liệu ở đây:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.