I use bash completion from https://bash-completion.alioth.debian.org/ and some vendor supplied scripts too (eg. https://github.com/git/git/blob/master/contrib/completion/git-completion.bash)
I also use export GREP_OPTIONS='-I --color=always --exclude=*.xhprof' because setting --color=always in (almost) every pipe is a massive pain.
However the completion scripts often use grep and don't specify --color=auto or --color=never because by default it's not needed, this leads to broken output where escaped terminal color codes get interleaved with the output making it hard to read. (see below)
^[[01;31m^[[K c^[[m^[[Kherry d^[[m^[[Kescribe g^[[m^[[Krep m^[[m^[[Kailinfo request-pull
a^[[m^[[Kdd c^[[m^[[Kherry-pick d^[[m^[[Kiff g^[[m^[[Kui m^[[m^[[Kailsplit reset
a^[[m^[[Km c^[[m^[[Kitool d^[[m^[[Kiff-files h^[[m^[[Kash-object m^[[m^[[Kerge revert
a^[[m^[[Knnotate c^[[m^[[Klean d^[[m^[[Kiff-index h^[[m^[[Kelp m^[[m^[[Kerge-base rm
a^[[m^[[Kpply c^[[m^[[Klone d^[[m^[[Kiff-tree h^[[m^[[Kttp-backend m^[[m^[[Kerge-file send-email
a^[[m^[[Krchimport c^[[m^[[Kolumn d^[[m^[[Kifftool h^[[m^[[Kttp-fetch mergetool shortlog
a^[[m^[[Krchive c^[[m^[[Kommit f^[[m^[[Kast-export h^[[m^[[Kttp-push mv show
b^[[m^[[Kisect c^[[m^[[Kommit-tree f^[[m^[[Kast-import history name-rev show-branch
b^[[m^[[Klame c^[[m^[[Konfig f^[[m^[[Ketch i^[[m^[[Kndex-pack notes stage
b^[[m^[[Kranch c^[[m^[[Kount-objects f^[[m^[[Ketch-pack i^[[m^[[Knit p4 stash
b^[[m^[[Kundle c^[[m^[[Kredential f^[[m^[[Kilter-branch i^[[m^[[Knit-db pull status
c^[[m^[[Kat-file c^[[m^[[Kredential-cache f^[[m^[[Kmt-merge-msg i^[[m^[[Knstaweb push submodule
c^[[m^[[Kheck-attr c^[[m^[[Kredential-osxkeychain f^[[m^[[Kor-each-ref i^[[m^[[Knterpret-trailers rebase subtree
c^[[m^[[Kheck-ignore c^[[m^[[Kredential-store f^[[m^[[Kormat-patch l^[[m^[[Kog reflog svn
c^[[m^[[Kheck-mailmap c^[[m^[[Kvsexportcommit f^[[m^[[Ksck l^[[m^[[Ks-files relink tag
c^[[m^[[Kheck-ref-format c^[[m^[[Kvsimport f^[[m^[[Ksck-objects l^[[m^[[Ks-remote remote verify-commit
c^[[m^[[Kheckout c^[[m^[[Kvsserver g^[[m^[[Kc l^[[m^[[Ks-tree repack whatchanged
c^[[m^[[Kheckout-index d^[[m^[[Kaemon g^[[m^[[Ket-tar-commit-id lg replace worktree
If completion were a command I ran manually I could just prepend the command with GREP_OPTIONS="", but since it's some combination of readline and bash which I don't fully understand I don't know what to do.
So is there a way to clear the GREP_OPTIONS during tab completion? Or some other solution that doesn't involve me typing --color=always over 100 times a day?
greptogrep --color=always? SettingGREP_OPTIONSis risky. It's not only completion scripts that are affected.GREP_OPTIONShas since I switched. That forum post says that aliases don't affect scripts, but I've found that to be false.GREP_OPTIONSaffects every instance ofgrep, but aliases only affect your interactive shell. For aliases to affect scripts, the script has to enable them. And if a script does enable them, then it has no way of knowing what it's running.echo $GREP_OPTIONSthat it was indeed unset.