GREP_OPTIONS = --color = luôn bị bỏ qua?


8

Tôi đã chơi xung quanh với thiết lập GREP_OPTIONSvà không thể làm cho nó hoạt động. Chỉ tò mò là tại sao.

Đầu ra lệnh kiểm tra đơn giản:

richard@ubuntu:~$ echo $GREP_OPTIONS

richard@ubuntu:~$ 

richard@ubuntu:~$ ls | grep o 
Desktop
downloads
Dropbox
ebooks
workspace

richard@ubuntu:~$ ls | grep o --color=always | less -R 

richard@ubuntu:~$ export GREP_OPTIONS="--color=always" 
richard@ubuntu:~$ ls | grep o  | less -R 
  1. Grep đầu tiên xuất ra thiết bị đầu cuối có màu (mỗi 'o' là màu đỏ)
  2. Grep thứ 2 xuất ra thông qua ít màu hơn (giống như 1)
  3. Nhưng grep thứ 3 xuất ra ít hơn nhưng có màu đen và trắng - nhưng màu này phải có màu.

Vì vậy, có vẻ như grep đang bỏ qua GREP_OPTIONS. Đó có phải là một lỗi hay tôi đang làm gì đó sai?

(Ubuntu 12.04.2, GNU grep 2.10)


grep v3.1phàn nàn lớn về GREP_OPTIONSmọi lời cầu khẩn:grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
Tom Hale

Tôi sử dụng: alias grep='GREP_COLOR="1;33;40" LANG=C grep --color=auto'để làm nổi bật màu vàng.
Tom Hale

Câu trả lời:


11

Nếu grep otạo đầu ra màu, thì đó greplà bí danh cho grep --color=autohoặc grep --color=always(hoặc có thể nhiều tùy chọn hơn) hoặc GREP_OPTIONSđược đặt thành giá trị có chứa --color=autohoặc --color=always. Vì $GREP_OPTIONSlà trống rỗng, nó phải là bí danh.

grep o | less -Rkhông hiển thị màu sắc, bí danh phải là grep --color=auto(một lựa chọn hợp lý). Với bí danh, greplệnh luôn nhận --colortùy chọn trên dòng lệnh và điều này được ưu tiên hơn biến môi trường.

Nếu bạn muốn sử dụng biến môi trường, hãy xóa định nghĩa bí danh khỏi bạn ~/.bashrchoặc cho một phiên chạy unalias grep. Bạn có thể thay thế alias grep='grep --color=auto'bằng export GREP_OPTIONS='--color=auto': về cơ bản chúng có cùng một nghĩa, ngoại trừ:

  • thiết lập GREP_OPTIONSmột giá trị khác chỉ ghi đè lên giá trị sau;
  • bí danh chỉ khởi động khi bạn chạy greptừ trình bao tương tác, trong khi cài đặt GREP_OPTIONScũng được áp dụng khi grepđược chạy từ tập lệnh và các ứng dụng khác.

Không bao giờ đặt --color=alwayshoặc hầu hết các tùy chọn khác vào GREP_OPTIONS: nó sẽ phá vỡ nhiều chương trình phân tích đầu ra của grep. --color=autolà về lựa chọn an toàn duy nhất để đưa vào GREP_OPTIONS. Đối với bất cứ điều gì khác, sử dụng bí danh. Các phiên bản tương lai của GNU grep sẽ bỏ hỗ trợ cho tùy chọn này vì lý do này.

Lưu ý rằng định nghĩa bí danh đi vào ~/.bashrc(đó là cài đặt shell), trong khi định nghĩa biến môi trường đi vào ~/.profile(đó là cài đặt phiên). Xem Có tệp tương đương ".bashrc" được đọc bởi tất cả các shell không?

Nếu bạn muốn chạy lệnh không thiên vị chỉ một lần, hãy chạy \grepthay vì grep(trích dẫn bất kỳ phần nào của tên bỏ qua tra cứu bí danh).


Có, bạn đúng, đang chạy \ grep ... hiển thị chính xác. Cảm ơn vì tiền thưởng đã khuyên tôi không nên sử dụng "= always" trong .bashrc. +1
Richard

1
Xin lưu ý rằng GREP_OPTIONSkhông được ủng hộ cho các aliasbiến thể.
Tất cả công nhân là cần thiết
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.