plan9の標準シェルrc
を最近メインで使い始めたのですが、ヒストリー機能がないとかそういうのは自前でやるとしても
rbenvなどの普段使っているツールが動かないのは辛いです。
rbenvとhubにrcサポート用のPR送ろっかなぁどニッチだけど
— Pocket7878 (@Hannibal7878) 2017年2月27日
rbenvなどは、rbenvからshell scriptを出力しそれをシェル側でevalする形で環境変数を設定したりPATHを設定したりしています。 例えばbashでrbenvを使うときに
eval $(rbenv init -)
のようにすると思いますが、これは
export PATH="/Users/pocket7878/.rbenv/shims:${PATH}" export RBENV_SHELL=bash source '/Users/pocket7878/.rbenv/libexec/../completions/rbenv.bash' command rbenv rehash 2>/dev/null rbenv() { local command command="$1" if [ "$#" -gt 0 ]; then shift fi case "$command" in rehash|shell) eval "$(rbenv "sh-$command" "$@")";; *) command rbenv "$command" "$@";; esac }
というスクリプトがrbenvから出力されこれがevalされてrbenv関数をシェル内に定義する形で行われています. 幾つかのサブコマンドも同様の方法でシェルが操作されているのですが、rcシェルはshシェルとは文法が異なるので そのままでは動きません。
同様の問題を抱えていそうなfishシェルについては既にpatchが取り込まれていたので、ソースコードをざっくりとfishで検索して 対応する箇所を大まかに絞って幾つかのサブコマンドにrcへの分岐を組み込みました。
特にrcではシングルクオートとダブルクオートの扱いが変わっていたりするのでそのあたりの考慮が大変でした。