タブ補完の可能性をファイルに保存

タブ補完の可能性をファイルに保存

次のように端末画面にすべての可能性を表示する代わりに:

$ ls /etc/<TAB>
Display all 230 possibilities? (y or n)

すべての可能性をファイルに保存したいと思います。

ls /etc/ > file.txt常に動作するわけではありません。 apt-getは例です。

$ apt-get <TAB>
autoclean        check            install          update
autoremove       clean            purge            upgrade
build-dep        dist-upgrade     remove           
changelog        dselect-upgrade  source           

tabcompletions 'ls /etc/'2つのコマンドのタブ補完の可能性を比較する次のコマンドを実行できるように、すべての可能性を出力するこのようなコマンドを探しています。

diff <(tabcompletions 'ls ') <(tabcompletions 'cd ')

それは可能ですか?

答え1

あなたのものには~/.bashrcおそらく次のようなものがあります。

if [ -f /etc/bash_completion ] && ! shopt -oq posix
then
    source /etc/bash_completion
fi

検索が続く場所で、タイトルには_quote_readline_by_ref必要なヒントが含まれています。

compgen -f /etc/

type compgenこれをもう一度追跡してみると、compgenが「シェル組み込み」であることがわかりました。つまり、次の位置に現れなければならないという意味ですman bash

compgen [option] [word]
       Generate possible completion matches for word according to the options ...

答え2

これはおおよそのアプローチですが、次のコマンドを使用できます。script

$ script -a lsdiff
Script started, file is lsdiff
$ ls <TAB>
a b c ...
$ <Ctrl-D>
Script done, file is lsdiff

上記を繰り返してcd違いを比較してみてください。

答え3

オートコンプリートするには、ls /etc/<TAB>次のようにします。

# print to screen
compgen -f /etc/ | sort
# store to file
compgen -f /etc/ | sort > output.txt
# print to screen *and* store to file
compgen -f /etc/ | sort | tee output.txt

詳細についてはを参照してくださいhelp compgencompgen明らかに「完了ジェネレータ」を意味します。

また、bashに組み込まれている組み込みの実行可能ファイルなので、見てman bash検索してください。一つあるcompgenman bashたくさんこのコマンドに関する追加情報compgen

たとえば、compgen -A command <cmd>と同じで、compgen -c <cmd>compgen -A file同じですcompgen -f。探すman bash-A action

また見なさい:

  1. すべてのバイナリを一覧表示$PATH
  2. タブ補完として表示されるコマンドのリストからどのようにパイプできますか?

関連情報