タブをダブルクリックしたときに何を表示するかをbashに正確に知らせる方法はありますか?たとえば、私はpython script scpy
を持っています。これには、いくつかの引数が必要です。たとえば、apt-get
、ダブルタブを使用すると
autoclean build-dep clean dselect-upgrade purge source upgrade autoremove check dist-upgrade install remove update
あなた自身のスクリプト/プログラムのためにそれを行う方法はありますか? pythonスクリプトをbashスクリプトでラップする必要がありますか?
これを行う最も簡単な方法は、/etc/bash_completion.d/
にシェルスクリプトを含めることです。このファイルの基本構造は、bashビルトインであるcomplete
の完了と呼び出しを実行する単純な関数です。 complete
の使用方法について詳しく説明するのではなく、 Bash補完の概要 を読むことをお勧めします。パート1では基本を説明し、パート2では補完スクリプトの記述方法を説明します。
Bash補完のより詳細な説明は、man bash
の[Programmable Completion]セクションにあります(「/ Programmable Completion」と入力してから、 'n'を数回押すと、そこにすばやく到達できます。または、幸運を感じる、「g 2140 RETURN」)。
こちらが基本ガイドです。
オートコンプリートを機能させたいadmin.shというスクリプトの例を見てみましょう。
#!/bin/bash
while [ $# -gt 0 ]; do
arg=$1
case $arg in
option_1)
# do_option_1
;;
option_2)
# do_option_1
;;
shortlist)
echo option_1 option_2 shortlist
;;
*)
echo Wrong option
;;
esac
shift
done
オプション候補リストに注意してください。このオプションを使用してスクリプトを呼び出すと、このスクリプトのすべての可能なオプションが出力されます。
そして、ここにオートコンプリートスクリプトがあります。
_script()
{
_script_commands=$(/path/to/your/script.sh shortlist)
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )
return 0
}
complete -o nospace -F _script ./admin.sh
完了する最後の引数は、オートコンプリートを追加するスクリプトの名前です。オートコンプリートスクリプトをbashrcに追加するだけで、
source /path/to/your/autocomplete.sh
または/etc/bash.completion.dにコピーします