ラベルをダブルクリックしたときに表示する内容を bash に正確に通知する方法はありますか?たとえば、scpy
複数のパラメータを使用するPythonスクリプトがあります。たとえば、ダブルapt-get
クリックすると次のようになります。
autoclean build-dep clean dselect-upgrade ソースアップグレードのクリア 自動削除の確認 dist-upgrade install アップデートの削除
自分のスクリプト/プログラムに対してこれを行う方法はありますか? pythonスクリプトをbashスクリプトにラップする必要がありますか?
答え1
最も簡単な方法はシェルスクリプトを含めることです/etc/bash_completion.d/
。ファイルの基本構造はcomplete
bash 組み込み関数を実行して呼び出す単純な関数です。complete
使用方法について詳しく説明するのではなく、次の内容をお読みください。Bash 完成について。パート1では基本を説明し、パート2では完成スクリプトを作成する方法を示します。
Bashの完了の詳細については、「プログラム可能な完了」セクションにあります。man bash
(「/プログラム可能完了」と入力してから「n」を数回押すとすばやく移動できます。運が良ければ「g」と入力してください。)2140
答え2
基本案内です。
admin.sh
オートコンプリート機能を呼び出すスクリプトの例を見てみましょう。
#!/usr/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
オプションに注意してくださいshortlist
。このオプションを使用してスクリプトを呼び出すと、スクリプトに使用可能なすべてのオプションが印刷されます。
autocomplete.sh
スクリプトは次のとおりです。
#!/usr/bin/bash
_script() {
_script_commands=$(/path/to/your/admin.sh shortlist)
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )
return 0
}
complete -o nospace -F _script /path/to/your/admin.sh
完了する最後のパラメータは、オートコンプリート機能を追加するスクリプトの名前です。あなたがする必要があるのは、オートコンプリートスクリプトを~/.bashrc
次のよう/etc/bash_completion.d
に追加することだけです。
source /full-path/to/your/autocomplete.sh
# or
. /full-path/to/your/autocomplete.sh
最後に実行可能にします。
chmod a+x admin.sh autocomplete.sh