pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/40705: Bash-completion fails several completions due to not checking for NetBSD in 'uname' output.



>Number:         40705
>Category:       pkg
>Synopsis:       Bash-completion fails several completions due to not checking 
>for NetBSD in 'uname' output.
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Feb 21 00:25:00 +0000 2009
>Originator:     Nick Coleman
>Release:        4.0
>Organization:
>Environment:
NetBSD mac.nick 4.0 NetBSD 4.0 (nick) #4: Sat Oct 18 23:00:39 WST 2008  
root@mac:/usr/src/sys/arch/macppc/compile/nick macppc
>Description:
Bash-completion-20060301 is a pkgsrc package in shells/.  It is a generic 
script to extend the completion features of Bash, adding completion for many 
commands like man, info, and a range of many others.  It is very useful (e.g. 
necessary) for people who spend a lot of time in a Bash shell.

It has been written to use the output of 'uname' to check for the existence of 
commands in different OSs, and to check and allow for different versions of 
commands (e.g. Solaris vs GNU).  The script does not allow for "NetBSD" as a 
match in uname and consequently many functions exit without performing the 
completion as they fail the OS test at the beginning of the relevent function.

The uname checks occur frequently throughout the script.  The problem has been 
reported on the Debian bug tracker: 
<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=501835>
and the comments there are worth reading for a good description of the full 
extent of the problem, and some suggested fixes.  In precis, they suggest the  
uname checks should be removed and changed to something like (paraphrase) [ -f 
command ] plus [ ${command -version} || ${command --version} ] or similar.


>How-To-Repeat:
Attempt to tab complete a 'man' command.  The completion will fail, as man is 
one of the functions that tests uname to check for the OS type and will fail 
since "NetBSD" is not tested.  See function _man() in bash_completion.

There are many other commands that also fail.  I have not tested them all since 
the bug is a logic one applicable to any function that uses uname.

FYI, FreeBSD and OpenBSD work correctly as their strings are included in the 
tests.
>Fix:
In order of difficulty of fix:

1) For the NetBSD package, add NetBSD to every instance of a uname test in 
bash_completion and the scripts in the contrib directory.  Or,

2) Rewrite the script to set appropriate environment variables at Bash startup, 
then remove all uname checks and instead test the environment variables.  This 
would be more efficient since the uname command is external to Bash whereis the 
environment test is internal. Or,

3) Switch to zsh.  (A little joke to lighten the mood.)



Home | Main Index | Thread Index | Old Index