On Friday, 28 November 2014 08:00:18 UTC, steveT wrote: > On Thursday, 27 November 2014 17:57:30 UTC, konsolebox wrote: > > On Fri, Nov 28, 2014 at 12:36 AM, steveT steveT wrote: > > > Is there any way that I can trace them back to their 'creator'? > > > > Besides checking common startup files like /etc/profile and ~/.profile or > > ~/.bashrc (see > > http://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html), > > you can also try to debug bash as it loads in login mode: > > > > # bash -lx &> out.txt > > # exit > > > > Read out.txt, try to find those declarations and pay close attention to > > lines before it that calls another file with . or source. If you don't > > find any kind of declaration, it's likely that those functions are declared > > somewhere during system init and that would depend on your init system. > > > > If it's me I'd just do fgrep something /etc -r (not -R unless I'm sure it's > > safe) and see if I can find something useful. It may still not be enough > > though - especially if those declarations are hard-coded in a binary > > executable or data file. You can also consider searching through the files > > of the base package of your init system - or even examine the sources if > > you can. > > > > Cheers, > > konsolebox > > Konsolebox, > Thanks - I did try recursively grepping etc and didn't find anything. > I will try the bash 'init' check, but I don't think it can be there as > wouldn't that imply that the BASH_FUNC__ vars would be there from the outset? > And, the BASH_FUNCs appear at random (obviously not random, as they must be > being triggered by something) points during the day - I can go hours and not > see these appear - I can use sudo and rcs to do various things and they don't > appear. > > Can I ask - is there a chance that it's something that I've done in a script? > Is there a setting somewhere that tells bash to export certain functions to > the shell or do you have to explicitly export them to see them in the > environment like this?
OK - found the functions that are appearing. I was grepping BASH_FUNC__ in etc - wrong. The functions are in the /usr/share/bash-completion/completions directory - and exist as rcs and sudo files. The code in those files defines functions for _rcs and _sudo respectively. The rcs file contains: # bash completion for rcs -*- shell-script -*- _rcs() { local cur prev words cword _init_completion || return local file dir i file=${cur##*/} dir=${cur%/*} # deal with relative directory [[ $file == $dir ]] && dir=. COMPREPLY=( $( compgen -f "$dir/RCS/$file" ) ) for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do file=${COMPREPLY[$i]##*/} dir=${COMPREPLY[$i]%RCS/*} COMPREPLY[$i]=$dir$file done COMPREPLY+=( $( compgen -G "$dir/$file*,v" ) ) for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do COMPREPLY[$i]=${COMPREPLY[$i]%,v} done # default to files if nothing returned and we're checking in. # otherwise, default to directories [[ ${#COMPREPLY[@]} -eq 0 && $1 == ci ]] && _filedir || _filedir -d } && complete -F _rcs ci co rlog rcs rcsdiff # ex: ts=4 sw=4 et filetype=sh OK - so that is the code that appears in my environment as BASH_FUNC__rcs - now the question is - why - and why does it persist? I am not aware of using completion with sudo or rcs - so where/why/how in bash do these /usr/share scripts get actioned?