~/blog/implementing-autocompletion-with-bash-complete-command
Published on

Bash completeコマンドでオートコンプリートを実装する

2230文字4分で読めます–––
閲覧数
Authors
  • avatar
    Name
    Shou Arisaka nyapp.buzz/shou
    short bio
    Z世代の情報技術者。Next.jsで自作SNSを個人開発中。

Linuxパソコン・サーバー、UbuntuでのBash言語コマンドラインで、completeコマンドでオートコンプリートを実装する方法について紹介します。

補完ともいいますね。タブ補完。英語だとオートコンプリートになります。便利な機能ですね。

さて、そんなオートコンプリートはどうやって実装すればいいのでしょうか。

fzfを使ってカスタマイズドなオートコンプリートを実装している方もいるかもしれませんが、fzfはfzfで、goなのに重いし、ちょっとした実装であれば大げさすぎます。

ちょっと独自関数実装して、その関数でタブ補完したときに、typeコマンド同様、コマンドや関数をタブ補完してくれるだけでいいんだけどなー。 cdコマンドのタブ補完と同じような候補を出したいなぁ、なんて場合。

types()という独自関数を実装して、type同様、コマンドを候補としてタブ補完したい場合は、以下。

complete -A command types
https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_20e31035-78f2-48c0-876f-285d95b9cef7.png

cdコマンドのタブ補完と同じような候補を出したいなぁ、なんて場合。

complete -F _cd hoge

ここらへんが使えそうです。

-A action The action may be one of the following to generate a list of possible completions:

-C command command is executed in a subshell environment, and its output is used as the possible completions.

-F function The shell function function is executed in the current shell environment. When it is executed, 1isthenameofthecommandwhoseargumentsarebeingcompleted,1 is the name of the command whose arguments are being completed, 2 is the word being completed, and $3 is > the word preceding the word being completed, as described above (see Programmable Completion). When it finishes, the possible completions are retrieved from the value of the COMPREPLY array variable.

-Aオプションでは、テンプレート的な感じで手軽にタブ補完候補を割当できます。値は以下からお好きなのを。

alias
arrayvar
binding
builtin
command
directory
disabled
enabled
export
file
function
group
helptopic
hostname
job
keyword
running
service
setopt
shopt
signal
stopped
user
variable

詳しい説明は以下リファレンスから。

Bash Reference Manual bash - What's the use of complete command? - Ask Ubuntu

bash_completionファイルを見るとわかりますが、コードが複雑で読む気にならないですね。type _cdでさえ何書いてあるのかわからないし…。

簡単なオートコンプリートは今回紹介したやり方がいいと思いますが、複雑なオートコンプリートを実装したい方は、fzfを使うことをおすすめします。

fzfでBashコマンドラインをめっちゃ便利にする
avatar

Shou Arisaka

情報技術者 / Z世代プログラマー / SaaSアプリやSNSを開発
今すぐ話そう!

15歳でWordPressサイトを立ち上げ、ウェブ領域に足を踏み入れる。翌年にはRuby on Railsを用いたマイクロサービス開発に着手し、現在はデジタル庁を支えたNext.jsによるHP作成やSaaS開発のプロジェクトに携わりながら、React.js・Node.js・TypeScriptによるモダンなウェブアプリの個人開発を趣味でも行う。
フロントエンドからバックエンドまで一貫したアジャイルなフルスタック開発を得意とし、ウェブマーケティングや広告デザインも必要に応じて担当、広告運用・SEO対策・データ分析まで行う低コストかつ高品質な顧客体験の提供が好評。
国内外から200万人を超える人々に支えられ、9周年を迎えるITブログ「yuipro」の開発者、デザイナーでありライター。現在ベータ段階の自作SNS「nyapp.buzz」を日本一の国産SNSとするべく奮闘中。

Created with Fabric.js 5.2.4 何かご質問がありますか?