bash-completion of Makefile: invalid option name

Bug #1330173 reported by Aapo Rantalainen
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
bash-completion (Ubuntu)
In Progress
Medium
Unassigned

Bug Description

Happened with two computers when upgraded from 13.10 to 14.04.
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"
GNU bash, versio 4.3.11(1)-release (x86_64-pc-linux-gnu)

Steps:
Create very simple Makefile
echo -e "foo: \n\nbar:" > Makefile

make [TAB]
Gives error "bash: set: posix: invalid option name"

make[TAB][TAB]
gives
bash: set: posix: invalid option name
bash: set: posix: invalid option name

bar foo

Revision history for this message
Aapo Rantalainen (aapo-rantalainen) wrote :

I created new user and bug didn't triggered. Then I copied .bashrc and bug triggered. With bisecting I found one row which destroys bash-completion for make.

.bashrc
-alias grep='grep --color=always'
+alias grep='grep --color=auto'

------
And after that, proper patch wasn't difficult.

/usr/share/bash-completion/completions/make

--- make_orig 2014-06-24 14:54:46.256847066 +0300
+++ make 2014-06-24 14:56:55.240851566 +0300
@@ -141,7 +141,7 @@
             mode=-d # display-only mode
         fi

- local reset=$( set +o | grep -F posix ); set +o posix # for <(...)
+ local reset=$( set +o | grep -F --color=never posix ); set +o posix # for <(...)
         COMPREPLY=( $( LC_ALL=C \
             make -npq "${makef[@]}" "${makef_dir[@]}" .DEFAULT 2>/dev/null | \
             sed -nrf <(_make_target_extract_script $mode "$cur") ) )

----
'grep grep /usr/share/bash-completion/completions/*' gives so many hits that it is possible that "grep is aliased to 'grep --color=always' " is bad idea.

affects: bash (Ubuntu) → bash-completion (Ubuntu)
Revision history for this message
Aapo Rantalainen (aapo-rantalainen) wrote :

bash-completion:
  Installed: 1:2.1-4

Revision history for this message
Peter Cordes (peter-cordes) wrote :

Good catch, but the right fix is to use command grep, like most of the uses of grep in bash-completion do. --color=never isn't portable to systems where grep isn't GNU grep. So yes, this is a bug, and bash-completion is supposed to not break even if you have
alias grep='cat /dev/random'

 But yes, --color=auto usually works better. If you ever make one-liners on the cmdline, you're shooting yourself in the foot unless you like remembering to type command grep, or \grep. Like less $(ls foo/bar | grep something).

 On the other hand, less -R can handle color escape codes these days, and even matches searches in coloured text. Hmm, that's pretty nice actually.

Revision history for this message
Peter Cordes (peter-cordes) wrote :

This is already fixed upstream in git head.

Changed in bash-completion (Ubuntu):
status: New → In Progress
Mathew Hodson (mhodson)
Changed in bash-completion (Ubuntu):
importance: Undecided → Medium
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.