Sample Header Ad - 728x90

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 cats 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