.bashrcの読み込み時に404:: command not foundが出るのを直す

.bashrcの読み込み時に、404:: command not foundが出ていた

更新履歴

  • 2023/5更新: docker compose -fの補完による問題は、Docker Desktopの更新やdnf updateで直ることを確認した。(直った時点のDockerのバージョンは23.0.5

事象

ターミナルを開いたときに、プロンプトが表示される前に、404:: command not foundが表示されていた。2行表示されていたが、1箇所修正すれば2行とも表示されなくなった。原因は同一だったのだろう。

原因

原因はbash-compeltionの初期化時に/etc/bash_completion.d/ディレクトリの中に、404:: command not foundとだけ書かれたファイルがあり、それを読み取っていたため。

後から知ったが、原因の調査では、bash -lxeで起動したシェルか、これにコマンドを渡せばデバッグモードになるので調べやすい。-lはログインシェルとして起動、-xは実行するコマンドを表示する。-eはエラー時に即時終了する。というオプション指定。他のオプションは、bash -c "help set"で見られる。

echoをたくさん挟むという工夫の足りない方法で調べていたことを反省したい。

原因の原因

原因となったファイルは、docker composeの補完がおかしいのを直そうとあがいてたときに生まれたもの。

事象

どうおかしいのかというと、

docker compose -f dockeまで打って、Tabを押すと該当するのがあるにもかかわらず、 docker compose -f y のようになる。-fに対する補完候補がymlyamlしかない印象を感じた。

ここでいろいろした

この解決のために結構試して、補完スクリプトのダウンロードを行ったときに、今回の冒頭の問題が起きたようだ。

sudo curl -L https://raw.githubusercontent.com/docker/compose/v2.15.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-composeなどを行ったようだ。

結局これで指定したリソースが存在しないため、404:: command not foundだけを/etc/bash_completion.d/docker-composeに保存する形になって、~/.bashrcのロード時に表示されるようになってしまったのが真相だ。

解決(待ち)

このdocker composeに関するissueを見つけた。

[BUG] compose file completion does not work · Issue #10420 · docker/compose
Description Compose should autocomplete -f to a file name. Steps To Reproduce In a shell, type: docker compose -f Expect...

からのこちら:

Fix plugin completion results parsing for `ShellCompDirectiveFilterFileExt` by laurazard · Pull Request #4136 · docker/cli
Compose V2 (and other plugins eventually) provide the extensions they want the shell to filter the autocompletion of fil...

もうプルリクが提出されているようなので、バージョンアップを待ってればいいようだ。

おわり

しっかり後片付けをしておけば防げた問題。やりっぱなしはやめよう。

2行の表示が1箇所の修正で直ったのは、bash-completionが2回呼ばれているためかなと思っている。それはそれで良くない気もするが、実害はなさそうなのでひとまず置いておく。

以上です。

タイトルとURLをコピーしました