Inferno-shell

shell

sh.dis

sh-tk

wm/wm して、ウィンドウマネージャを立ち上げて、シェルを立ち上げてから、

load std tk
pctl newpgrp
wid=${tk window 'My window'}
tk $wid update

すると、My Windowというウィンドウが立ち上がる。

while {} {tk winctl $wid ${recv $wid}} &

環境変数

getenv/setenvで環境変数を設定できる。 環境変数は/envにファイルとして置かれる。

だから、cat /env/hogeで環境変数をとれる。

シェル変数

infernoの標準のshellではshell変数は自動的に環境変数となる。(Plan 9のrcと 一緒)

foo=bar

で環境変数 fooへbarが代入される。

shell変数 foo が存在しなければ、

echo $foo

は環境変数の値を表示する。(従って $foo が shell 変数 foo の値であると言うの は正しくない。)

shell 変数と環境変数が一致しない状況を

u=alice
echo -n bob >/env/u
echo $u# alice を出力する
cat /env/u# bob を出力する

を実行する事によって確認する事ができるだろう。

子プロセスへは shell 変数は引き継がれない。Plan9 では(UNIX と異なり)親子 で環境変数を共有する事ができる。その場合も子プロセスにおける環境変数や shell 変数の変化は親プロセスの shell 変数に影響を与えない。shell の再帰 的実行が巧く行くと言う訳だ。

Infernoのshell

shellがあるけどつかえなーい!

acmeを使えと言われるが、どうにもなじまない。

というわけで、limboの練習を兼ねて作ってみたい。 あるいはすでにあるなら教えてください。

これがinfernoの思想とあっているかどうかは知らない。

http://www.cs.rit.edu/~ats/inferno/code/07/shell.b を参考に。

(入れたい)機能

scriptとしての機能は別にいらない。それこそshなりmashなり使えばいい。