なんともシンプルな名前「rc」。
ご存知の方もいらっしゃるかもしれませんが、「AT&T Plan9」のシェルです。
これが、Homebrewでインストールできます。
$ brew install rc
# ログインシェルに登録する場合は以下の3行を実行
$ sudo su
$ echo /usr/local/bin/rc >> /etc/shells
$ exit
最近のお気に入りは「fish」だったのですが、今は「rc」にして楽しんでいます。 設定ファイルは「.rcrc」一つだけ。
それもログインシェルのときしか読み込まれません。
このシェルはインタラクティブでも使えますが、シェルスクリプトで真価を発揮するようです。
$ man rc
rc is a command interpreter and programming language similar to sh(1). It is based on the AT&T Plan 9 shell of the same name. The shell offers a C-like syntax (much more so than the C shell), and a powerful mechanism for manipulating variables. It is reasonably small and reasonably fast, espe-cially when compared to contemporary shells. Its use is intended to be interactive, but the language lends itself well to scripts. ...
とにもかくにも、まずはログインシェルとして使えるように「.rcrc」を設定します。
Mac標準のシェルではないので、まずはPATHから。
# path_helperで本来のPATHを取得 eval `{/usr/libexec/path_helper -s | /usr/bin/sed -e '/\"/s///g' -e '/\; export PATH\;/s///'}
path_helperというのは、Macが標準で準備しているプログラムで、/etc/pathsと/etc/paths.dの内容からパス文字列を生成してくれます。
「-s」オプションはbash系の「:」接続、「-c」オプションがtcsh系の「空白」接続です。
でも、そのままでは「rc」に使えませんので、sedで加工します。
やってる事は、「”」を取っ払う事と、最後の「;」以降を取っ払う事です。
(もうちょっとちゃんとした書き方があると思うけど勘弁)
「`{・・・}」がbashでいう「`・・・`」にあたります。
それをevalして環境変数PATH完成です。exportは要りません。
また同時に「path」も生成されます。こちらは空白区切りのリスト構造になります。
# For me path=($HOME/bin $path)
たいていの環境変数はbashやzshのように設定して大丈夫なようですが、こういう微妙なところに注意が必要です。
# file mask umask 077 # host name hostname=`{/bin/hostname -s} # history file history=$HOME/.rc_history
if文やsource文はこんな感じです。
# Read aliases if (test -e $HOME/.rc.aliases) { . .rc.aliases }
書き方がCライクだというだけで、特に変わったところはありません。
一番違うのは、プロンプトの出し方です。bashや他のシェルみたいにプロンプト用の環境変数はありません。
# user prompt fn prompt { cwd=`{/bin/pwd | /usr/bin/sed -e s@^$home@~@} prompt=$LOGNAME'@'$hostname'['$cwd'] ' }
こういう風に自前の関数で内部変数promptを定義してやります。
cwdの行でやっているのは、$homeの文字列を「~」に変換しているだけです。
また「rc」にはaliasというものはなくて、全部こういう感じの関数になります。
ところで、この「rc」で前述の「FDclone」を使おうとすると困った事になります。
どうやら、リモート接続だと誤解されてしまうようで、操作制限がかかります。
実験してみた結果、環境変数SHELLで回避できることがわかりました。(rcの「r」に反応した?)
# fdclone fn fd { shell_backup=$SHELL SHELL=/usr/local/bin/fdsh /usr/local/bin/fd $* SHELL=$shell_backup shell_backup=() cd `{cat $FD_LAST_PATH_FILE} }
追加でやってる事は単純で、単に環境変数SHELLをバックアップして、fdshに変更し、FDが終了したらそのバックアップを環境変数SHELLに戻す、それだけです。
shell_backup=()は不必要になった変数shell_backupを抹消します。
ちなみに、こうした追加シェルをログインシェルに変更する方法は、
MACのシステム環境設定→ユーザとグループ→変更するにはカギをクリックします。→<ユーザー名>を右クリック→詳細オプション...→ログインシェルに直接書く
で変更できますが、以下のコマンドラインでも可能です。
sudo chsh -s /usr/local/bin/rc <ユーザー名>
いずれの場合も、一旦ターミナルを終了させてターミナルを再起動させてください。
ピンバック: autojump | VivaFan通信