2016-08-13 17 views
0

既存のコマンドをいくつかの砂糖でラップするコマンドを作成すると、元のコマンドのオートコンプリートをサポートする新しいコマンドが必要になります。他のコマンドのオートコンプリートスクリプトを再利用するようにBashに指示する方法はありますか?別のコマンドのBashオートコンプリートの使用

愚か例:

cat > ~/ls-on-steroids.sh <<EOF 
echo "Here are some goodies!" 
ls "[email protected]" 
EOF 
chmod +x ~/ls-on-steroids.sh 

は今、どのように私は、そのような私が入力したときに私の新しいスクリプトを設定します:

ls <TAB><TAB> 

~/ls-on-steroids.sh <TAB><TAB> 

を私はと同じ振る舞いを希望します

好ましくは、ポータブルで、繰り返し可能な方法で、の位置を手動で追跡する必要なく0のオートコンプリートスクリプト。

答えて

2

手動で設定する必要がありますが、既存のコマンドから補完をコピーするのは比較的簡単です。まず、complete -p lsを実行して、もしあれば、コマンドがlsのために定義されていたかどうかを確認してください。何も表示されない場合、lsは特別な補完を使用しません。おそらく、出力として次のようなものを見ることが期待されている

機能 _lsがコマンド lsのための補完を生成するために呼び出され、何も結果を生成しない場合は、使用されていることを述べている
complete -o default -F _longopt ls 

かかわらずbashデフォルトの完了。あなたは、単に

complete -o default -F _longopt ls_on_steroids 

を(すなわち、complete -pによって印刷されたコマンドの最後の引数としてls_on_steroidslsを置き換える)を実行してls_on_steroidsに同じ機能を適用することができます。

+0

それはそれが自動化できるように聞こえます。しかし、どんな警告もありますか?そのコマンドは異なるシステムで異なって見える?オートコンプリートを提供するコマンドの名前を取得するより直接的な方法はありますか? –

+0

'complete'のように複数のコマンドがあるので、私はちょうど実行できます:' complete -p ls | sedの/ $/ls-on-steroids/'ls'のオートコンプリートでスクリプトをインクルードします。 –

+0

私は '$(complete -p ls | sed 's/$' ls-on-steroid//' –

関連する問題