自作シェルでbash-completionが動き始めた
Mon Feb 17 11:46:43 JST 2025 (modified: Mon Feb 17 18:43:23 JST 2025)
views: 347, keywords:自作シェル, sush, 寿司シェル, bash-completion
ほんとは今年の正月に決着をつけるつもりだったのですが、連載で作っているRust製の自作シェル(Rusty Bash、和名は寿司シェル)で、やっとbash-completionが動くようになりました。
bash-completionってなに
bash-completionというのはメジャーどころのLinux環境のBashならデフォルトで動いている、シェルの補完機能です。たとえばBashでls --
と打ってタブを押すと、
ueda@x1gen13:~$ ls --
--all --ignore=
--almost-all --indicator-style=
--author --inode
--block-size= --kibibytes
というようにロングオプションの候補が出てきますが、これは、この変態シェルスクリプトで動いています。この補完候補は、bash-completionがls --help
を起動して、出力からロングオプションをBashの正規表現機能でスクレイピングして出力しています。変態です。
寿司シェルの状況
上の例については自作シェル(dev-completionブランチ)でも、
オプションの補完できた〜〜〜(ゼエゼエ) #自作シェル pic.twitter.com/0rTmCENxya
— 上田隆一 (@ryuichiueda) February 16, 2025
というように動きました。あとは、ファイル名の補完も自分で書いたものから変更して、bash-completionのものを使うようにしました。ただ、まだbash-completionがつかっているBashの全機能を信頼性高く実装しているわけではないので、たまにエラーやワーニングが出ます。
次はgit
の補完機能を動かそうとしています。ただ、他のコマンドと違って少々特殊なので、まだどうやってやるか、現状の寿司シェルでなんで動かないかは把握できてません。
結構大変なんだけどひっそりと開発
bash-completionへの対応は、2024年の5月に
自作シェル、いい感じで使えてるんだけどbash-completionほしいなあ・・・(遠い道のり) pic.twitter.com/YyvNQiBULL
— 上田隆一 (@ryuichiueda) May 2, 2024
と言ってから開始しだしたので、ほぼ10ヶ月かかりました。かなりの工数がかかるので、bash-completionが動く自作シェルはBashと、あといくつかしか存在しないと思われます。
ただ結構大変な割に、自分自身の営業不足であんまりネットがざわざわしておりません。変態geek行為をしていれば勝手に盛り上がった昔とは違うんです・・・違うんです・・・。ということで、ちょっとでも寿司シェルに興味を持ってもらうため、なんで作っているのか書いておくと、
- 自分でコードをいじれるシェルがあると嬉しいな
- シェルもいつか(数十年後?)脱C言語しなければならなくなると思うので、そのときに選ばれると嬉しいな
- 自分で作りもせずにシェルの専門家名乗ってきてすみません(名乗ってないけど事実上)
くらいに考えてのことです。上のふたつになにか心がひかれるなら、乗っかっていただければ幸いです。特にOSかなにかにバンドルされるようになると嬉しいので、もしなんかそういう活動がしたい人はご協力お願いいたします。それから、あとはコードの質問はなるべく返事しますので、Rustの勉強にもご活用ください。また、敷居の低い参加方法としては、未実装の部分でもなんでもいいから、issueに「Bashはこう動くけど寿司シェルは違う」と書いていくという方法があるかと(当面は日本語でおkで)。
現場からは以上です。なにとぞなにとぞよろしくお願いいたします。