GREP_OPTIONS= --color=常に無視されますか?

GREP_OPTIONS= --color=常に無視されますか?

設定に触れていますが、GREP_OPTIONS正常に動作しません。理由が気になります。

簡単なテストコマンド出力:

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は端末に色で出力されます(各「o」は赤です)。
  2. 2番目のgrepはより少ない色で出力されます(1と同じ)。
  3. ただし、3番目のgrepは出力が少ないが白黒ですが、色でなければなりません。

だからgrepがそれを無視しているようですGREP_OPTIONS。これはバグですか、それとも私が間違っているのですか?

(Ubuntu 12.04.2、GNU grep 2.10)

答え1

grep oカラー出力が生成される場合、これはまたはのエイリアスであるgrepか(またはより多くのオプションがある可能性があります)、またはを含む値に設定されます。空なので、別名でなければなりません。grep --color=autogrep --color=alwaysGREP_OPTIONS--color=auto--color=always$GREP_OPTIONS

色が表示されないため、エイリアスはto(合理的な選択)でgrep o | less -Rなければなりません。grep --color=autoエイリアスを使用すると、grepコマンドは常に--colorコマンドラインからオプションを受け取り、そのオプションは環境変数よりも優先されます。

環境変数を使用するには、~/.bashrcまたはセッションの実行からエイリアス定義を削除しますunalias grepalias grep='grep --color=auto'次に変更できますexport GREP_OPTIONS='--color=auto'。以下を除いて、本質的に同じ意味を持ちます。

  • 別の値に設定すると、GREP_OPTIONS後者のみが無視されます。
  • grepこのエイリアスは対話型シェルで実行している場合にのみ適用されますが、設定はスクリプトや他のアプリケーションで実行している場合にも適用されますGREP_OPTIONSgrep

--color=always他のオプションを入れないでくださいGREP_OPTIONS。多くの解析が中断される可能性がある唯一の安全なオプションですgrep。他のすべてにエイリアスを使用してください。このため、GNU grepの将来のバージョンではこのオプションはサポートされなくなります。--color=autoGREP_OPTIONS

エイリアス定義~/.bashrc(シェル設定)が入り、環境変数定義~/.profile(セッション設定)が入ります。バラよりすべてのシェルが読める「.bashrc」に対応するファイルはありますか?

エイリアスなしでコマンドを一度だけ実行したい場合は、\grep代わりに実行してくださいgrep。名前の一部を引用すると、エイリアス照会は無視されます。

関連情報