Apakah GREP_OPTIONS = --color = selalu diabaikan?

8

Saya bermain-main dengan pengaturan GREP_OPTIONSdan tidak bisa membuatnya bekerja. Hanya ingin tahu mengapa.

Output perintah uji sederhana:

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 pertama menghasilkan terminal berwarna (masing-masing 'o' berwarna merah)
  2. Grep ke-2 menghasilkan warna yang lebih sedikit (sama dengan 1)
  3. Tetapi output grep ke-3 menjadi lebih sedikit tetapi dalam warna hitam & putih - tetapi ini harus berwarna.

Jadi tampaknya grep mengabaikan GREP_OPTIONS. Apakah itu bug atau saya melakukan sesuatu yang salah?

(Ubuntu 12.04.2, GNU grep 2.10)

Richard
sumber
grep v3.1keras mengeluh tentang GREP_OPTIONSsetiap doa:grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
Tom Hale
Saya menggunakan: alias grep='GREP_COLOR="1;33;40" LANG=C grep --color=auto'untuk menyoroti dalam warna kuning.
Tom Hale

Jawaban:

11

Jika grep omenghasilkan keluaran warna, maka grepmerupakan alias ke grep --color=autoatau grep --color=always(atau mungkin lebih banyak opsi), atau GREP_OPTIONSdisetel ke nilai yang mengandung --color=autoatau --color=always. Karena $GREP_OPTIONSkosong, itu pasti alias.

Karena grep o | less -Rtidak menunjukkan warna, alias harus ke grep --color=auto(pilihan yang masuk akal). Dengan alias, grepperintah selalu menerima --coloropsi di baris perintah, dan ini lebih diutamakan dari variabel lingkungan.

Jika Anda ingin menggunakan variabel lingkungan, hapus definisi alias dari Anda ~/.bashrc, atau untuk satu sesi sesi unalias grep. Anda dapat menggantinya alias grep='grep --color=auto'dengan export GREP_OPTIONS='--color=auto': mereka pada dasarnya memiliki arti yang sama, kecuali bahwa:

  • pengaturan GREP_OPTIONSke nilai yang berbeda hanya menimpa yang terakhir;
  • alias hanya menendang ketika Anda menjalankan grepdari shell interaktif, sedangkan pengaturan GREP_OPTIONSjuga berlaku ketika grepdijalankan dari skrip dan aplikasi lainnya.

Jangan pernah menaruh --color=alwaysatau kebanyakan opsi lain di GREP_OPTIONS: itu akan merusak banyak program yang mengurai output grep. --color=autoadalah satu-satunya pilihan yang aman untuk dimasukkan GREP_OPTIONS. Untuk hal lain, gunakan alias. Versi GNU grep yang akan datang akan menjatuhkan dukungan untuk opsi karena alasan ini.

Perhatikan bahwa definisi alias masuk ke ~/.bashrc(itu adalah pengaturan shell), sedangkan definisi variabel lingkungan masuk ke ~/.profile(itu adalah pengaturan sesi). Lihat Apakah ada file setara ".bashrc" yang dibaca oleh semua shell?

Jika Anda ingin menjalankan perintah unaliased sekali saja, jalankan \grepalih-alih grep(mengutip bagian mana pun dari nama bypass alias pencarian).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Ya Anda benar, menjalankan \ grep ... menunjukkannya dengan benar. Terima kasih atas tip bonus untuk menasihati saya agar tidak menggunakan "= selalu" di .bashrc. +1
Richard
1
Harap dicatat bahwa GREP_OPTIONSsudah usang karena aliasvarian.
Semua Pekerja Penting