sh.dis
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 の再帰 的実行が巧く行くと言う訳だ。
shellがあるけどつかえなーい!
acmeを使えと言われるが、どうにもなじまない。
というわけで、limboの練習を兼ねて作ってみたい。 あるいはすでにあるなら教えてください。
これがinfernoの思想とあっているかどうかは知らない。
http://www.cs.rit.edu/~ats/inferno/code/07/shell.b を参考に。
scriptとしての機能は別にいらない。それこそshなりmashなり使えばいい。