だいぶ前に、いろんな環境で汎用的に使えるBashのスクリプト集を作っていた。
docker
コマンドや kubectl
コマンドの接続先をいい感じに管理したくて、自分しか参照できない非公開の Dropbox や Google Drive に接続情報を置いて、必要に応じて半自動的に同期するようなことをしていた。大変すぎる。
SSHの公開鍵認証をエージェント経由で行うために、WSL debian なら ssh-add
で秘密鍵を登録する、Windows PC なら pageant
で秘密鍵を登録する、登録した鍵の一覧はどちらも ssh-add -l
で参照できる、みたいな場合分けなどもやっていた。ssh-pageant
というファイル名がいつもスペルチェッカーに怒られている。
それはそれとして、ちゃんとした技術情報の記事を書こうと思ったけど、いろんなものが動かなくなっていたので、先に環境を整えないといけなくなってしまった。
世の中の流行に乗ってみたくなったので awesome-bash を見てくることにする。
awesome-bash
awesome-bashのShell Package Management というセクションに、たぶん定番のライブラリが並んでいる。
名前が気に入ったので Bash-it を使うことにした。
Bash-it
oh-my-zsh のようにリポジトリをcloneする方式だった。 readthedocs にちゃんとしたドキュメントが整備されていて分かりやすい。
カスタマイズする方法は Custom Content — Bash-it documentation に書いてある。
BASH_IT_CUSTOM
という環境変数に指定したディレクトリへ置いてある *.bash
という名前のファイルを読み取ることになっている。
直下だけじゃなくて、もう一つ下の階層も探すようになっている。普通は直下を見るだけでいいと思うんだけど、なんで一つだけ下を見るようにしているんだろう。
https://github.com/Bash-it/bash-it/blob/master/bash_it.sh#L76-L86
# Custom _log_debug "Loading general custom files..." for _bash_it_main_file_custom in "${BASH_IT_CUSTOM}"/*.bash "${BASH_IT_CUSTOM}"/*/*.bash; do if [[ -s "${_bash_it_main_file_custom}" ]]; then _bash-it-log-prefix-by-path "${_bash_it_main_file_custom}" _log_debug "Loading custom file..." # shellcheck disable=SC1090 source "$_bash_it_main_file_custom" fi BASH_IT_LOG_PREFIX="core: main: " done
今の状態になる前は、/**/*.bash
という書き方をしていて、空白文字を含むユーザー名など展開に失敗する場合があるからときれいに書き直された結果、深いところまで探索する機能が失われていた。
コード品質は高まったからOKだと絶賛されている。
という状態なので、深い階層を作らないよう少し気にしながら自作のスクリプト集を移植した。
それぞれのスクリプトの中で alias を定義したいときや completion を定義したいときは文字列を source してるけど、本当は aliases/custom.aliases.bash
や completion/custom.completion.bash
から読み取らせたい。
試したけどちゃんと動かなかったので放り出してしまった。