As my time with linux, I created a lot of scripts. Some of them have input parameters and sometimes I just forget this parameters.
So I wonder if there is some way to create autocomplete parameters, like i autocomplete a path by pressing the tab key?
For example a script. ./test.sh can be completed with parameter-one, eg. ./test.sh parameter-one
or ./test.sh parameter-two
. If i type now ./test.sh followed by tab it should add parameter-one if i press tab again it should change to parameter-two.
How can I do that? I’m on bash…
Here’s an article that does this: https://iridakos.com/programming/2018/03/01/bash-programmable-completion-tutorial
I have done this for one of my own tools
ta
, which is a function that switches to a tmux session, or creates it if it doesn’t exist:# switch to existing tmux session, or create it. # overrides workdir if session name is "Work" function ta() { case "$1" in Work) workdir="${HOME}/Work/" ;; *) workdir="${HOME}" ;; esac if tmux has-session -t "$@" &>/dev/null; then tmux switch-client -t "$@" else tmux new-session -A -D -d -c "${workdir}" -s "$@" tmux switch-client -t "$@" fi } # complete tmux sessions # exclude current session from completion function _ta_completion() { command="${1}" completing="${2}" previous="${3}" [[ "${command}" != 'ta' ]] && return current_session="$(tmux display-message -p '#S')" IFS=$'\a' COMPREPLY=( $(tmux list-sessions -F '#{session_name}' | grep -i "^${completing}" | grep -v "^${current_session}$"| tr '\n' '\a' ) ) } # enable completion for ta function complete -F _ta_completion ta
Usage
$ tmux (starts session "0" by default) $ ta Personal # create session "Personal" because it doesn't exist $ ta Work # create session "Work" because it doesn't exist $ ta <tab> 0 Personal $ ta P<tab> -> $ta Personal $ ta <tab> 0 Work