のようなプログラムを使用する場合svn
、Gnome ターミナルに次のように入力します。
svn upd
クリックするとTab次のように自動補完されます:
svn update
カスタム bash スクリプトでそのようなことを行うことは可能ですか?
答え1
新しいファイルを作成する必要があります:
/etc/bash_completion.d/foo
静的な自動補完(たとえば--help
/ )の場合は、以下を追加します。--verbose
_foo()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--help --verbose --version"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F _foo foo
COMP_WORDS
現在のコマンド ライン内のすべての単語を含む配列です。COMP_CWORD
現在のカーソル位置を含む単語のインデックスです。COMPREPLY
Bash が可能な補完候補を読み取る配列変数です。
このコマンドは、現在の単語 に一致する、、compgen
の要素の配列を返します。--help
--verbose
--version
"${cur}"
compgen -W "--help --verbose --version" -- "<userinput>"
答え2
完全なチュートリアルはこちらです。
admin.sh
オートコンプリートを機能させたいスクリプトの例を見てみましょう。
#!/bin/bash
while [ $# -gt 0 ]; do
arg=$1
case $arg in
option_1)
# do_option_1
;;
option_2)
# do_option_2
;;
shortlist)
echo option_1 option_2 shortlist
;;
*)
echo Wrong option
;;
esac
shift
done
オプションに注意してくださいshortlist
。このオプションを使用してスクリプトを呼び出すと、このスクリプトで可能なすべてのオプションが出力されます。
ここにオートコンプリート スクリプトがあります:
_script()
{
_script_commands=$(/path/to/your/script.sh shortlist)
local cur
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )
return 0
}
complete -o nospace -F _script ./admin.sh
最後の引数 complete は、自動補完を追加するスクリプトの名前であることに注意してください。必要なのは、次のように自動補完スクリプトを bashrc に追加することだけです。
source /path/to/your/autocomplete.sh
または、次の場所にコピーします:
/etc/bash_completion.d
答え3
あなたはプログラム可能な完了いくつかの例については/etc/bash_completion
とをご覧ください。/etc/bash_completion.d/*
答え4
単純な単語ベースの自動補完だけが必要な場合(つまり、サブコマンドの補完などは不要)、コマンドには適切な処理を実行するオプションcomplete
があります。-W
たとえば、次のような行を.bashrc
プログラムに自動補完するために使用しています。ジュピター:
# gleaned from `jupyter --help`
_jupyter_options='console qtconsole notebook' # shortened for this answer
complete -W "${_jupyter_options}" 'jupyter'
今ではjupyter <TAB> <TAB>
自動補完されるようになりました。
のドキュメントgnu.org のが役に立ちます。
変数が正しく設定されていることに依存しているようですIFS
が、私にとっては問題は発生していません。
ファイル名補完とデフォルトの BASH 補完を追加するには、次の-o
オプションを使用します。
complete -W "${_jupyter_options}" -o bashdefault -o default 'jupyter'
complete
これを zsh で使用するには、コマンドを実行する前に次のコードを追加します~/.zshrc
。
# make zsh emulate bash if necessary
if [[ -n "$ZSH_VERSION" ]]; then
autoload bashcompinit
bashcompinit
fi