How to use bash command completion so that only files within a particular directory are completed?
1
vote
1
answer
606
views
Suppose I have a bash function
specialcat
that cat
s a file in the ~/Special directory
specialcat () {
cat ~/Special/$1
}
Suppose the ~/Special directory was set up like so:
mkdir ~/Special
echo This is the first special file > ~/Special/firstfile
echo This is the second special file > ~/Special/secondfile
The specialcat function is used like:
> specialcat firstfile
This is the first special file
I want to enable argument completion so that
> specialcat firstf[TAB]
produces
> specialcat firstfile
regardless of what the current working directory is and what files happen to be there.
This is my attempt so far
_options_specialcat () {
COMPREPLY=( $(compgen -W "$(ls ~/Special)") )
}
complete -F _options_specialcat specialcat
which leads to
> specialcat firstf[TAB]
firstfile secondfile
> specialcat firstf
That is, pressing tab on a partial file name will display the list of files, but will not complete the command.
How do I alter my _options_specialcat
function to produce the desired behavior?
Asked by panofsteel
(113 rep)
Jul 1, 2016, 02:36 AM
Last activity: Jul 1, 2016, 01:48 PM
Last activity: Jul 1, 2016, 01:48 PM