Isso também pode ser feito via Bash programmable completion . Eu montei um pequeno script de amostra.
O script abaixo completa um comando fap
( encontrar e reproduzir ) que você deve definir separadamente, por exemplo
fap
#! /bin/sh
file="$2"
totem "$file" > /dev/null &
exit 0
Em seguida, coloque o seguinte script no diretório /etc/bash_completion.d
/etc/bash_completion.d/fap
_fap()
{
local cur prev dir i saveIFS
COMPREPLY=()
_get_comp_words_by_ref cur prev
saveIFS=$IFS
IFS=$'\n'
dir="$cur"
if [ -z "$cur" ]; then
dir="/home/user/music"
elif ! [ -d "$cur" ]; then
dir="'dirname "$cur"'"
fi
local files=$(find 'dequote "$dir"' -type f -iname "*${prev}*" -printf "%p\n")
COMPREPLY=( $( compgen -W "${files}" -- $cur ) )
for ((i=0; i < ${#COMPREPLY[@]}; i++)); do
_quote_readline_by_ref ${COMPREPLY[i]} COMPREPLY[i]
done
IFS=$saveIFS
return 0
} &&
complete -F _fap -o nospace fap
Altere a linha dir="/home/user/music"
de acordo (pasta inicial da sua coleção de músicas). Próxima fonte do script
. /etc/bash_completion.d/fap
Agora você pode usar a conclusão da tabulação como esta
fap frozen [TAB]
fap frozen /home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/09\ -\ Madonna\ -\ Frozen.mp3
ou, se houver mais opções
$ fap girl [TAB]
$ fap girl /home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/[TAB][TAB]
/home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/04\ -\ Madonna\ -\ Candy\ Perfume\ Girl.mp3
/home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/13\ -\ Madonna\ -\ Mer\ Girl.mp3
$ fap girl /home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/0[TAB]
$ fap girl /home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/04\ -\ Madonna\ -\ Candy\ Perfume\ Girl.mp3