コマンドラインエイリアスでタブ補完機能を使用したいと思います。たとえば、次のエイリアスを定義するとします。
alias apt-inst='sudo aptitude install'
Tabキーを押したときにaptitudeが提供する完成を得る方法はありますか?つまり、「sudo aptitude install gnumer」と書いてタブを押すと、aptitudeがgnumericで完了するか、わからない場合はgnumerで始まる利用可能なすべてのパッケージが一覧表示されます。私のエイリアスを使ってこれを行うと、何も起こりません。何もしません。
答え1
努力する完全エイリアス、この問題を正確に解決します。 (婦人声明complete_alias
:私は)の著者です
インストールしたら、共通関数を使用して次のような多くのエイリアスを実行できます。
complete -F _complete_alias <myalias1>
complete -F _complete_alias <myalias2>
complete -F _complete_alias <myalias3>
complete_alias
または、同様の方法で各bashインスタンスからこのファイルを取得できます.bash_profile
。
インストールする
mkdir ~/.bash_completion.d
curl https://raw.githubusercontent.com/cykerway/complete-alias/master/complete_alias \
> ~/.bash_completion.d/complete_alias
アプリケーション
source ~/.bash_completion.d/complete_alias
alias container=docker\ container
complete -F _complete_alias container
container
これで、_docker()
元の完了ハンドラによって自動的に完了できます。
$ container l<Tab>
logs ls
$ container s<Tab>
start stats stop
答え2
持つUbuntuフォーラムには、この問題のための素晴らしいスレッドがあります。。 Ole Jは、次のエイリアス補完定義機能を提案しました。
function make-completion-wrapper () {
local function_name="$2"
local arg_count=$(($#-3))
local comp_function_name="$1"
shift 2
local function="
function $function_name {
((COMP_CWORD+=$arg_count))
# Quotes here are important
COMP_WORDS=( "$@" \"\${COMP_WORDS[@]:1}\" )
"$comp_function_name"
return 0
}"
eval "$function"
echo $function_name
echo "$function"
}
これを使用して、別名の完成関数を定義し、その関数を別名の完成子として指定します。
make-completion-wrapper _apt_get _apt_get_install apt-get install
complete -F _apt_get_install apt-inst
私は、既存のプログラムで一般的に使用されるパラメータを追加するためにエイリアスを使用することを好みます。たとえば、grep
私はいつもデバイスとバイナリをスキップしたかったのでgrep
。たとえば、新しいコマンドを追加するには、grepbin
フォルダにあるシェルスクリプトを使用します~/bin
。フォルダがパスにある場合は自動的に実行されます。
答え3
この問題はインターネット検索で終わったので、他の答えの方法を試しました。実際には理解できないさまざまな理由で、Ubuntu 16.04では正しく機能しませんでした。
結局のところ、私のために働いたのは予想以上に些細なことでした。と同じオートコンプリートrsync
機能を使いたいですmycommand
。それでオートコンプリート機能を見つけてそれに合わせてcomplete
呼び出しました。
# Lookup of name of autocompletion function used for rsync
_completion_loader rsync; complete -p rsync
# Returns: complete -o nospace -F _rsync rsync
# Sourcing the rsync functions before, then using the same function for 'mycommand'
. /usr/share/bash-completion/completions/rsync
complete -o nospace -F _rsync mycommand
免責事項:他の方法と比較すると、私の方法の欠点が何であるかわかりません。私は主に人々に役立つことができ、この簡単なアプローチで十分であるため、この記事を書いています。
答え4
2018年の回答
「complete」プログラムにエイリアスを追加する必要があります。達成したいオートコンプリートの種類に応じて、-cまたは-Fを使用する必要があります。
パッケージオートコンプリートの場合:
complete -c name_of_your_alias
コマンドオートコンプリートの場合:
complete -F name_of_your_alias
エイリアスが正しく追加されたことを確認するには、次の手順を実行します。
complete | grep name_of_your_alias
最後に、「フル」からエイリアスを削除します。
complete -r name_of_your_alias
あなたの場合:
complete -c apt-inst