Creating A Bash Completion Script
Creating A Bash Completion Script
Creating A Bash Completion Script
tab
$ git<tab><tab>
git git-receive-pack git-upload-archive
gitk git-shell git-upload-pack
$ git-s<tab>
$ git-shell
complete
1 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
dothis
ls -a
235
dothis 235
dothis
$ dothis <tab><tab>
215 ls
216 ls -la
217 cd ~
218 man history
219 git status
220 history | cut -c 8-
dothis
if [ -z "$1" ]; then
echo "No command number passed"
exit 2
fi
if [ -n "$exists" ]; then
fc -s -- "$1"
else
echo "Command with number $1 was not found in recent history"
exit 2
fi
2 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
fc
chmod +x ./dothis
dothis
~/bin PATH
dothis
$ dothis
No command number passed
dothis-completion.bash
source source
dothis
now
tomorrow
never
complete complete
#/usr/bin/env bash
complete -W "now tomorrow never" dothis
complete
-W
dothis
3 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
source ./dothis-completion.bash
$ dothis <tab><tab>
never now tomorrow
$ dothis n<tab><tab>
never now
-W
dothis
dothis
$ dothis <tab><tab>
dir1/ dir2/ dir3/
dothis
dothis
#/usr/bin/env bash
_dothis_completions()
{
COMPREPLY+=("now")
COMPREPLY+=("tomorrow")
COMPREPLY+=("never")
}
-F _dothis_completions
dothis
COMPREPLY
4 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
$ dothis <tab><tab>
never now tomorrow
$ dothis nev<tab><tab>
never now tomorrow
COMPREPLY
COMPREPLY
compgen complete -W
-d
dothis
COMP_WORDS compspec
COMP_CWORD COMP_WORDS
COMP_LINE
dothis COMP_WORDS[1]
#/usr/bin/env bash
_dothis_completions()
{
COMPREPLY=($(compgen -W "now tomorrow never" "${COMP_WORDS[1]}"))
}
$ dothis
never now tomorrow
$ dothis n
never now
5 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
fc -l -n
fc -l -50
sed
#/usr/bin/env bash
_dothis_completions()
{
COMPREPLY=($(compgen -W "$(fc -l -50 | sed 's/\t//')" -- "${COMP_WORDS[1]}"))
}
$ dothis <tab><tab>
632 source dothis-completion.bash 649 source dothis-completion.bash 666 cat ~/.bash_profile
633 clear 650 clear 667 cat ~/.bashrc
634 source dothis-completion.bash 651 source dothis-completion.bash 668 clear
635 source dothis-completion.bash 652 source dothis-completion.bash 669 install ./dothis ~/bin/dothis
636 clear 653 source dothis-completion.bash 670 dothis
637 source dothis-completion.bash 654 clear 671 dothis 6546545646
638 clear 655 dothis 654 672 clear
639 source dothis-completion.bash 656 dothis 631 673 dothis
640 source dothis-completion.bash 657 dothis 150 674 dothis 651
641 source dothis-completion.bash 658 dothis 675 source dothis-completion.bash
642 clear 659 clear 676 dothis 651
643 dothis 623 ls -la 660 dothis 677 dothis 659
644 clear 661 install ./dothis ~/bin/dothis 678 clear
645 source dothis-completion.bash 662 dothis 679 dothis 665
646 clear 663 install ./dothis ~/bin/dothis 680 clear
647 source dothis-completion.bash 664 dothis 681 clear
648 clear 665 cat ~/.bashrc
$ dothis 623<tab>
$ dothis 623 ls 623 ls -la
...
$ dothis 623 ls 623 ls 623 ls 623 ls 623 ls -la
${COMP_WORDS[1]} dothis
623
COMP_WORDS
6 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
#/usr/bin/env bash
_dothis_completions()
{
if [ "${#COMP_WORDS[@]}" != "2" ]; then
return
fi
$ dothis 623<tab>
$ dothis 623 ls -la<tab> # SUCCESS: nothing happens here
dothis
compgen
#/usr/bin/env bash
_dothis_completions()
{
if [ "${#COMP_WORDS[@]}" != "2" ]; then
return
fi
.bashrc
source <path-to-your-script>/dothis-completion.bash
/etc/bash_completion.d/
7 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
\e[34mBlue
COMPREPLY
printf
#/usr/bin/env bash
_dothis_completions()
{
if [ "${#COMP_WORDS[@]}" != "2" ]; then
return
fi
local IFS=$'\n'
local suggestions=($(compgen -W "$(fc -l -50 | sed 's/\t//')" -- "${COMP_WORDS[1]}"))
COMPREPLY=("${suggestions[@]}")
fi
}
dothis <tab><tab>
...
499 source dothis-completion.bash
500 clear
...
503 dothis 500
DOTHIS_COMPLETION_COMMANDS_NUMBER
8 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
#/usr/bin/env bash
_dothis_completions()
{
if [ "${#COMP_WORDS[@]}" != "2" ]; then
return
fi
local commands_number=${DOTHIS_COMPLETION_COMMANDS_NUMBER:-50}
local IFS=$'\n'
local suggestions=($(compgen -W "$(fc -l -$commands_number | sed 's/\t//')" -- "${COMP_WORDS[1]}"))
COMPREPLY=("${suggestions[@]}")
fi
}
export DOTHIS_COMPLETION_COMMANDS_NUMBER=5
$ dothis <tab><tab>
505 clear
506 source ./dothis-completion.bash
507 dothis clear
508 clear
509 export DOTHIS_COMPLETION_COMMANDS_NUMBER=5
goto
9 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
10 de 11 05/04/2021 20:33
Creating a bash completion script https://iridakos.com/programming/2018/03/01/bash-programmable-co...
11 de 11 05/04/2021 20:33