製品評価ーーー from UNIX REVIEW A / UX のアプリケーション 今月はこれまでの慣例をいくらか破って、特定の UNIX の実装とその上で走るいくっかのアプリケーシ ョンについて紹介する。理由は単純である。 A/UX2.0 が何千もの安価なフィールドテスト済みのアプリケーシ ョンをサポートしているからである。 とくに、デバイス (SCSI など ) や非公開のメモリ位置 へ直接アクセスしていない Macintosh のアプリケーシ ョンの大部分をサポートしている。また、パッケージは 、、 32 ビット・クリーン〃である必要はない。これは、あま りにも多くのアプリケーションがいまだに通過できない テストである。 A/UX によって、大部分の Macintosh ソフトウェア が UNIX 界へもたらされた。そしてそのパッケージが、 一貫性、ドキュメント、使いやすさ、コスト・パフォー マンスの水準を引き上げるときがきたのである。いくつ かの伝統的な UNIX べンダーが、このような状況に注 意を向けることは十分にありうる。 ちょっとした歴史 利益こそ生まなかったものの、 AppIe と UNIX との 関係は長くなる。 UniPress は Lisa のために UNIX の 1 バージョンを販売した。しかし、人気はパッとしなか った。 Lisa が死んだとき、 Lisa の UNIX も運命をとも ーー 0 数年後、 Apple はふたたび挑戦した。 John Sculley が UniForum に現れてコンピュータの利用に関する AppIe の構想を宣伝し、 A/UX のリリースを発表した のである。残念ながら、いくつかの事情が重なってこの 製品の話題性は弱まってしまった。 新しいリリースでは、 A / UX はごくわずかのアプリケ UNIX MAGAZINE 1991.6 by Richard Morin ーション・ソフトウェアしか提供できなかった。実装は よかったが地味で、 Macintosh Ⅱはとくに魅力のある マシンではなかったのである。その結果、この製品は大 きな需要を喚起できなかった。 問題は悪化し、弱かった売買と流通手段はなくなって しまった。 AppIe は UNIX の媒体に姿を見せす、 A/ UX はどこでもあと押しされなかった。大学や政府から 契約を穫得する努力はされたが、ほかの顧客は流通経路 の欠落のために二の足を踏むことになった。 さいわい、現在ではこれらの問題はほば解決されてい る。 A / UX2.0 は Macintosh のアプリケーションのは とんど全部をサポートしており、これがかなりのソフト ウェア基盤になっている。また、最近の Macintosh のモ デルは性能がたいへんよくなった。 移植された UNIX はもともと SystemV と BSD を あわせた強力なものだったが、これはさらに改良されて いる。 DWB Ⅱ、 ksh 、ジョブコントロール、 N FS 、 RCS 、信頼できるシグナル、および UFS(BSD の高速フ ァイルシステム ) をサポートしている。つまり、フルセッ トの UNIX にオマケがついているのである。 A/UX は AppIe の流通経路でも扱うようになった ので、かなり購入しやすくなったはすである。残念なが ら、 Apple はいまだに A/UX の販売促進のやり方が分 かっていないようである ( 販売を促進すべきかどうか も ) 。たぶん、われわれが手助けできるであろう。 市場 A/UX は、 AppIe を政府、研究所、大学市場へ進出さ せた。これらの機関の一部は UNIX を必要としており、 その場合には A/UX が Apple のとりうる唯一の選択 11
UN Ⅸへの招待① 具体的には、 /usr/sys で最新の更新日時をもっディレク、、を /usr/sys/conf から捜します。たとえば、以下の例で最 トリの名前と一致するコンフィギュレーション・ファイル 新のコンフィギュレーション・ファイルは SNOOPY です。 % ls -tF /usr/sys/conf SNOOPY touch. c sv_param. C touch* spconf. c UNI OSB_NOTRFS defines devices .0m68k % ls -t /usr/sys SNOOPY/ conf/ OBJS. 30 / wipc/ ufs/ sys/ trfs/ rpcsvc/ specfs/ rpc/ om68ki f / files files .0m68k UNIOSB_NOQUOTA_NOTRFS Makefi1e . vax newdate* newdate . C newvers . Sh param. C om68kdev/ 0m68k / netddp/ netimp/ nfs/ netinet/ netns/ net/ krpc/ UNIOSB_NOQUOTA_NOTRFS/ 該当するコンフィギュレーション・ファイル ( この例では SNOOPY ) が存在していたら、 GENERIC ではなくその ファイルをコピーしてそれを編集します。以降の説明では、 コンフィギュレーション・ファイル GENERIC をコピー して SNOOPY を作り、それを使ってカーネルの構築をす ることにしましよう。 次に必要なのは、カーネル構築用のコンフィギュレーシ ョン・ファイルの編集です。このときにも GENERIC をい きなり編集するのではなく、 cp コマンドで新たな名前のフ ァイルにコピーします。 # cd /usr/sys/conf # cp GENERIC SNOOPY % head ー 10 /usr/sys/conf/GElmIC そして、 SNOOPY を編集します。コンフィギュレーシ ョン・ファイルのなかには、大別すると以下の 4 つの情報 patch-trap* patch-trap. c UNIOSB_NOQUOTA ksymbol* ksymbol. c Makefi1e .0m68k G盟臼 . IC UNIOSB_NOQUOTA/ UNIOSB_NOTRFS/ OBJS_NOTRFS/ OB JS_NOQUOTA/ OBJS_NOQUOTA_NOIRFS/ GENER. IC/ machine@ if@ dev@ GENERIC の先頭を覗いてみましよう。 4 ) 装置の情報 どの位置 3 ) カーネルが置かれているディスク装置、スワッフ。装置な 2 ) カーネルのオプション 1 ) マシンのタイプなどの情報 が含まれています。 machine cpu ident t imezone maxusers opt i ons opt 10 s config 0m68k " M68030 " "UNIOSB" ー 9 dst 32 vmumx root on sdOc swap on sdOg and sdlg "SX9100DT" "TCP_COMPAT_42" , JDP ー CO ト田 AT ー 42 " INEI ・ , NFS , n.FS , ENETFILTER, QUOTA UNIX MAGAZINE 1991.6 155
IJN Ⅸへの招待 ー同 : かんば一い ! ー同 : 大丈夫かよー aya . 0 先生、おそいなあ。 0 先生 : 大丈夫でしよう。 X X X : え ? 0 先生も来るの ? aya . うん ! : ー ) 奧さんがお弁当作ってくるんだって。 新入生を迎えるクラブの勧誘などで使うのでしようか。 ikura : 僕も、お弁当作ってきました。 構内にはテントがいくつか張られていました。そしてなぜ ー同 : そりやすごい ! か、そのうちの 1 つが桜の木の下の芝生の上に張られてい aya: ( げ ! 男の子が手作りおつまみ持ってきてる・・ たのでした。一同は、ちゃっかりそこに移動。だんだん激 あれあれ、ソーセージにべーコン巻き、枝豆もある ! 手 しくなる雨のなか、買い込んだお酒も底をつき、 2 度目の ぶらで来てしまった私はどうしよう ) ピールの買い出しに。そのうち雨が横なぐりになってきま まもなく 0 先生が到着。そのころ、ポッポッと雨が落ち てきました。今週もまた、天気はくすれてしまったので marui . わたくし、雨が背中にふりつけて、少々つらいと田 す。 っていたりするのです。 dareka: おおー! あっちにもこっちにも立て看板がある marui.•みなさーん一 こはやつばり避難でしよう。すば ゃんけ。あれ持ってきし。テントの周りを囲めは雨にも り ! あの講堂の入口あたりが正解でしよう。あそこは桜 負けす ! 並木も見えますし、雨にも濡れない絶好の場所です。 0 先生 : 君たち ! 始末書を書かされるはめになったら、ど ー同 : えー、はすかしいがな。 ーするんだい。 こにいる職員は俺だけなんだからさ。 aya: あの、あの、あの、あそこにテントが張ってあるよね aya ・ 1 人しゃいやなら、オゲ先生も呼びましよう ! さっ え。あの下っていうのは ? き研究室でテトリスやってましたよ。 xxx : 僕、そこの図書館から内線電話て呼び出してきます ! 一同べロべロ。立て看板を持ってきて、宴会は続きます。 道ゆく人は、やはりへんな顔して私たちを眺めていきます。 kiriko ・ねえ、やつばりちょっとはすかしいわね。 dareka . いいしゃないの、ノ、ツノ、ツノ、ツノ、。 marui . おや ! あそこをあいあい傘して歩くは、研究室の hogehoge 先輩 ! すはり、彼女でしよう ! 0 グ 0 xxx : おつ、昼ご飯のときに食堂でも会ったんですよ ! 単なる後輩とか言ってましたけどねえ。あやしい一 ー同・ギャーノ、ツ / 、ツノ、一 aya ・みなさん、どうしましようね ? 通りすがりの人がも しここに教科書買いに来たりしたら。 ー同 : キ・ヤー - 、ノ、ツノ、ツノ、ツ。 もう、めちゃくちゃ。しつは、立て看板にはこう書いて あったのです。 「教科書はもう買いましたか ? 生協」 ーー 0 、 0 0 ア 0 0 0 0 0 0 9 。 0 0 0 ' 0 0 ・木月のん illustration 152 UNIX MAGAZINE 1991.6
IJN Ⅸへの招待 教科書は買いましたか ? 坂本文 3 月も、もうすぐ終ろうとするある金曜日・・ aya : 最近さあ、週末になると雨が降るっていうパターン しゃない ? tsun . ああ、そういえばそうね。 aya : 洗濯物が溜まって困るんだよね。週末が雨だと。 aya: いいねえ ! ( うーむ、魅力的だけど明日は昼間から宴 ない ? ノヾーツーと。 tsun . あーらほんと。どう ? 気晴らしにカラオケしてか aya ・ふむ。あら、こんな時間。そろそろ帰ろっかなあ。 もゆーうつになるしねえ。 tsun . そうそう。そのうえ、せつかくの休みが雨だと気分 ほら、帰りましよ。 んてまだ咲いてないわよ。気の早い人たちだわね。はら tsun . なに ? 明日、お花見に行くつもりだったの ? 桜な かり ) 咲いてないから明日の花見は中止するだってえ ! ( がっ 、ゲッ ! aya: おや、メールが来たわ。なになに・ 会だしなあ、まっすぐ帰ったはうが安全かな ) まだ もうちょっと仕事してくわ。 aya ・うーん、お先に帰って。明日の宴会なくなったから、 OO さんたちは、雨でも来ると言っています 花は見こ・ろ、でもお天気は心配。 中止した花見は、今度の土曜日に予定どおりうちの学校でやります。 翌週、またまた花見メールがやってきました。 UNIX MAGAZINE 1991.6 当日、約束の時間よりすいぶん早く着いてしまったので、 ご無沙汰している 0 先生のところに寄ってみることにし ました。 休み中なので来ていないかもしれないなあ、と思いなが ら構内を歩いていけば、桜は満開。花見宴会に向けて、気 分はいやがうえにも盛り上がっていきます。 aya ・ ( お、いるいる ) やつほーー 0 先生 : おや、あやちゃん、久しぶり。今日はなにしに来た の ? : 今日は先生に UNIX を教えてもらいに来ました。 aya ・・・なーんて、ジョークですよん。花見、花見。花見宴 会 : ー〉 x x x さんが主催なんですよ。。先生も来ませ 0 先生 : おや ! 偶然、僕も今日は花見なんだよ。うちのか みさんカ峅当作ってて、もうすぐ来るのよ。 aya: え、お手製弁当 ! いいなあ、ね ? ね ? 一緒にしよ うよう。 0 先生 : おまえなあ、ちゃっかし弁当に期待したんだろ ? ま、いいけどさ、そっち何人だよ ? aya ・わっかんない。でも交際範囲の広い xxx さんのこ とだから、少なくても 10 人くらいは集まるんしゃない かなあ。 0 先生 : おいおい、 10 人ぶんの弁当はないよ ! あっちこっちで花見宴会が開かれていましたが、さすが に上野や九段とは違います。満開の桜の下でも簡単に場所 がとれたので、こばれんばかりに咲きほこる木の真下に陣 取りました。 151
連載 An lntroduction tO X Window System 中村眞 フレッシュマンに捧げる X 事始め X フロトコルの実際 ) 連載は、継続して読んできた読者からすると、より深く 広範な内容を扱ってもらいたいと思うことでしよう。とこ ろが途中から読み始めた読者にとっては、目にする用語が ちんふんかんふんで苦労するのではないでしようか。今回 は、気持ちも新たに、この連載を初めて目にするフレッシ ュマンに向けてまさに題名どおりの、、 AnIntroductionto X Window System" をお届けします。 マルチ・ウインドウの光と影 現代のコミュニケーションの手段は、家庭に FAX か持 ち込まれるなど、多様化の一途をたどっています。出版に しても、図解主体の本に始まり、劇画をとおして専門的な 内容を紹介するもの、さらには朗読カセットやピデオを駆 使したものさえ見受けられます。 コンピュータの世界においても、文字と数字を主体にし たものから、図形、グラフ、写真などのイメージ、音、動 画へと向かっています。これらのいくっかを組み合わせ、 入力、蓄積、加工、伝達、表示ができるマルチメディアの 処理が要求されています。 UNIX が生まれた当初は、おもに英文字の処理を主体と する端末を複数接続して利用していました。現在のワーク ステーションでは、このようなマルチメディアへの要求に 対応できるハードウェアが備わっています。表示ひとつを とってみても、ピットマップ・ディスプレイ装置が標準的 に装備されています。ウインドウ・システムは、従来の端 末に代わるターミナル・エミュレータを複数起動して、そ れぞれ独自のプログラムを実行させ、一度に複数のプログ ラムの実行表示を可能にしたばかりではありません。表現 の選択をひろげ、図形やイメージの表示もできるようにし 144 たのです。 現在では、 UNIX は、、ワークステーションでウインド ウ・システム〃を前提に活用され、おもに 1 台の機械を 1 人で占有するようになりました。大容量かつ高速なディス クを備えたファイルサーバーやスーパーコンピュータなど も、それ自体にビットマップ・ディスプレイ装置があるわ けではありませんが、表示には手もとのワークステーショ ン上のウインドウ・システムをネットワークを介して利用 しています。 ウインドウ・システムのおかげで、はしめて GUI (Graphical User lnterface) による図形指示を中心とし たコンピュータの利用が可能になり、不慣れな利用者でも 高度な活用ができるようになったのです。ただし、 UNIX のコマンド行でツールを組み合わせて使うという小気味よ さにも捨てがたい、、味〃があり、 GUI がすべての点で優れ ているとはいえません。 現状では、論理的な記述やプログラミングなどにおいて は、ターミナル・エミュレータを複数用意して 1 つの画面 に表示できるという程度の ( それでも十分な ) 利点しかな いともいえるでしよう。 なぜ X が使われているのか 端的にいえは、多くのワークステーションで採用された からにほかなりません。はかにも優れたウインドウ・シス テムはありますが、ソフトウェアを書く立場からいえば、 できるだけ一般化されたシステムを好むのは当然といえ るでしよう。これは、 UNIX がひろく採用されている理由 と似ているようにも思います。 では、なぜ X が採用されたのでしようか。理由の 1 っと UNIX MAGAZINE 1991.6
マジカル・ミステリー・ツアーいたしましょ⑨ V 凵 W と SuperScaIar と SuperPipeIine 竹岡尚三 今回は、こんなこととは関係のないアーキテクチャの話 です。 がんばれ、ぎよびちゃん VLIW 僕はアニメをあまり見ないのですが、「きんぎょ注意報」 はなせか 1 回目から見ています。タイトルもさることなが ら、ヾわびこ〃という人間ばなれした名前を女の子につけて 最近アーキテクチャの世界では、 VLIW 、 Super あるのがなかなかぶっ飛んだセンスでよいですね。で、 Scalar 、 SuperPipeline というものが話題になっていま れが『なかよし』に連載中とかで、いまどきの子どもは『り す。どれもマイクロ・プロセッサ化され、いくつかはワー ほん』の「ちびまるこちゃん」とあわせて、なかなかしぶ クステーションにも搭載されています。 いセンスを鍛えられているのです ( 『りほん』の岡田あーみ なかでも VLIW はかなり昔から存在していました。 んのセンスはしぶいのを通り越しているが : ー ) ) 。 VLIW とは Very Long lnstruction Word の略です。っ そしてもひとつ気づいたことは、なんと猫部ねこ ( 「きん まり、とても長い命令語長をもった機械ということです。 ぎょ注意報」の原作者 ) もさくらももこ ( 「ちびまるこちゃ VLIW は CPU 内部に複数の実行ュニット ( おもに ん」の原作者 ) も静岡出身だということなのです。 ALU ) を積み、それらを駆動するために幅の広いバスで べつにそれがどうということもないのでしようが、僕は ALU のための制御命令をいちどに送りこむものです。マ 現在どうしたわけか静岡県のすぐ隣に住んでいて、 この イクロ・プロセッサでは lntel の i860 が VLIW に近いの 気候というのがしつに温暖なのです。それもなましつかで ですが、いかんせんいっぺんに 2 つの命令しか送りこめな はなくて、もう、木も草も動物も育つ、育っ : ー ) たとえ いので、・匠では LIW(Very ではない ) などといわれてい こでは大あさり〃という貝が採れるのですが、は ます。 ば、 まぐりも顔負けの 5cm ほどもあるのですよ。それから、浜 VLIW では RISC と同様に単純で幅の広い命令を使っ 松の蜆塚 ( ししみづか ) という貝塚に行くと、何世紀ぶんの てデコードを簡単にし、高速に ALU などを操作します。 人間が食べたのか分からないくらい、ものすごく膨大な量 RISC は ALU などの実行ユニットを 1 つしかもたなかっ の貝殻が積もっているのです。 たのですが、 VLIW は実行ユニットを複数にした RISC 動植物が育っから人間も育つ。きっと、昔の人びとも温 とみることもできます。 RISC と同し思想ですから命令の 暖だから、、のほはん〃と暮らしていけたのでしようね。そ デコードは簡単で、しかにハードウェアを制御しているよ して、しつは現代人もその気候の恩恵を受けているのでは うにみえます。 CISC はなかでマイクロコードを使い、独立 ないでしようか ? すくなくとも気候の厳しい北国の人で したユニットを同時に制御していますが、 VLIW というの は CISC のなかで動いていた水平マイクロコードが表に は、「きんぎょ注意報」のような切れたものはアホらしくて 考えつかないんしゃないかなあ、とのほはんと考える暖か 出て、ハードウェアのユニットを直接制御しているような ものです。 い春の午後です。 119 UNIX MAGAZINE 1991.6
if (ofpath = NULL) { ofd = 1 ; } else { logblksiz = 512 * 2 ; logblksiz = 512 * 4 ; / * stdout * / if ( 矼 . st. st-dev ofsdev) { / * 同じファイルシステムかどうかの検査 * / ofsdev = st. st_dev ; fstat(ofd, &st) ; / * 出力ファイルのシステムデノヾイス id の取得 * / exit (EXIT—FAILURE) ; perror("opening output file") ; if (ofd ー ofd = open(ofpath, O-WRONLY ー O—CREAT ー 0 ・ IRUNC, / * 出力ファイルの作成 * / 0 ) ; fputs("outfile must on different file system than\ deleted file. \n" , stderr) ; unlink (ofpath) ; exit(EXIT_FAII. URE) ; / * 所有者、グループおよび許可を元のファイルと同じに設定する * / sprintf(fspath, 't%s/%s" , FSDEVDIR, de 0 Ⅱ ( 矼 . st. st-dev)) ; / * ファイルシステムのデハ・イスのオープン * / chmod(ofpath, 矼 . st. st—mode) ; chown(ofpath, 矼 . st. st—uid, 矼 . st. st-gid) ; switch (fs. s-type) { } else { logblksiz = 512 ; if (fs. s-magic ! = FsMAGIC) { / * 論理プロックサイズの決定 * / exit (EXIT—FAILURE) ; perror('treadlng super block't) ; if ( 皿く sizeof(fs) ) { 矼 = read(fsfd, &fs , (unsigned)sizeof(fs) ) ; lseek(fsfd, (10ng)PHYSBLKSIZ, SEEK—SED ; / * スーノく一プロックの読取り * / exit(EXIT_FAILURE) ; perror("opening disk device") ; if (fsfd ー fsfd = open(fspath, O—RDONLY) ; case Fs1b: logblksiz break; case Fs2b : break ; case Fs4b: break; default: = 512 ; fputs("lnvalid file system type ・ \n" exit (EXIT—FAII. URE) ; / * プロックノヾッフアの割当 * / for (i = 0 ; i く nelems(blkbufv) ; + + i ) { blkbufv[i] = (char *)malloc((size-t)logblksiz) ; / * ファイルデータの復元 * / tnw = 0 ; / * 直接プロックアドレス * / for (i = 0 ; i く BATDIRC; + + i ) { if (tnv > = . st. st—size) { break ; getbataddr(blkaddr, 矼 . bat' i) ; stderr) ; nw = recover(fsfd, logblksiz' blkaddr' 0 , 矼 . st. st—size if ( れ perror("error recovering file data") ; exit (EXIT—FAII. URE) ; tnw 十 = nw; UNIX MAGAZINE 1991.6 tnw, ofd) ; UNIX ファイルの復元■ 117
int int char * Char * int int int short int int int char * dev_t off_t char struct struct struct daddr_t blkaddr = 0 ; dfd dfpath fiename fsfd 1 level = NULL , logblksiz = 0 ; ofd ofpath ofsdev tnw / * プロックアドレス * / / * int character * / / * del ファイル記述子 * / = Ⅱ . L ; / * del ファイルのノくス名 * / ・ / * undelete するファイル * / / * ファイルシステムのファイル記述子 * / / * ループインデックス * / / * 間接レベル * / / * 論理プロックサイズ * / / * 読み取られた文字数 * / / * 書き込まれた文字数 * / / * 出力ファイル記述子 * / = NULL; / * 出力ファイルのパス名 * / / * 出力ファイルのシステムデハ・イス id * / / * 書き込まれた / シークされた合計文字数 * / fspathCPAN_MAX + 1 ; / * ファイルシステムのデパイスパス名 * / / * 削除されたファイル・レコード * / delfil 矼 ; / * スーノく filsys fs; ープロック * / / * 出力ファイルのステータス * / stat st ; / * コマンド行オプションと引数の処理 * / -argc; + + argv ; if (argc く 1 ) { / * ファイル名 * / fputs(USAGE, stderr) ; exit(EXIT_FAII. URE) ; filename = *argv; -argc; + + argv ; if (argc } else { / * 出力ファイルのノくス名 * / ーの { ofpath = NULL ・ ofpath = *argv; ¯argc; + + argv ; if (argc ! = の { fputs (USAGE , stderr) ; exit(EXIT_FAILURE) ; / * 削除されたファイルのパス名の取得 * / dfpath = getdfpath ( ) ; if (dfpath = NULL) { fputs(PROGNAME い $ HO ト旧 e Ⅱ V1 て 01 皿 e Ⅱ t variable not set. \Ⅱ" / * 削除されたファイルの探索 * / exit (EXIT_FAILURE) ; perror("opening del file") ; fprintf ( stderr , "DeIeted file %s not found. \n't if (errno = 盟 0 T ) { if (dfd = dfd = open(dfpath, O_RDONLY) ; / * 削除されたファイルのオープン * / exit (EXIT_FAILURE) ; stderr) ; nr = read(dfd, & 矼 , sizeof(df)) ; if ( 皿 = perror("readlng deleted record file") ; exit(EXIT_FAILURE) ; if ( 皿く sizeof(df)) { fprintf(stderr, "De1eted file %s not found. \n't , filename) ; exit (EXIT_FAILURE) ; (strncmp(df. filename , filename, sizeof(df. filename)) break ; if 116 / * 出力ファイルのオープン * / close(dfd) ; / * 削除されたファイルのクローズ * / filename) ; UNIX MAGAZINE 1991.6
srekcah@sra. CO. jp 連載 Little Language 厄 on 入門 4 ) キントト ? 104 マッチは次回に延期し、 lcon が備えるデータ構造について ってしまいました : ーくというわけで unifdef のリターン srekcah はなんたることかプログラミングの泥沼にはま が、 lcon 特有のスマートな式訓甎機構を活用しようとして 今回は、 lcon 版 unifdef の続編をお届けする予定でした lcon のデータ構造 証言をお待ちしております。 。読者の皆さんの 並みに所有していたはすなのですが 冗られていなかったのでしようか ? プリキおもちやは人 ントトジョウロは srekcah の生まれ育ったあたりでだけ のようで、どうにも合点がいきません。ひょっとして、キ という答が返ってきます。知らなかったのは srekcah だけ の数人に訊いてまわると、一様に、、たしかに知っている〃 そこで今度は、そういうジョウロを知っているかと近く ではありませんか。 みかけるように、、あなたはなぜ知らないの ? 〃と詰間する トで持っていたものだ〃と言い張るのです。そして、たた もというものはこれとバケッ ( あるいは金ダライ ) をセッ ような目つきで、、これはキントトといい、すべからく子ど と編集部の A さんに訊ねたところ、彼女は異星人でも見る srekcah はそのときはしめて見たのですが、これは何か ルメした金魚の絵が強烈な色彩で描かれています。 た小ぶりなジョウロで、平べったい形をしており、デフォ なれないものが置いてありました。プリキを成型して作っ ある日、 UNIXMAGAZINE の編集部を訪れると、見 すこしていねいに解説することにしましよう。 リスト、集合、テープル、レコードの 4 つをとりあげます。 リスト リストは 0 個以 - E のデータの順序列です。 1 つのリスト に相異なる型のデータが混在していてもかまいません。リ ストの要素としてリストが含まれることもあります。 リストは、要素をプラケット [ ] で括って表現します。 [ " alpha " gamma't ] "beta't このように内容を明示的に列挙する方法のほかに、組込 み関数 list を用いてリストを作成する方法もあります。以 下の例で LI は 10 個の値 & null を要素とするリスト、 L2 は空リストです。 LI L2 ・ = Iist(10, & u11 ) = list() リストは、インデクスを用いてその要素を個別に指定す ることもできます。リストは左端の要素から順に 1 、 2 ・・・・・・と インデクスします。 alist がリスト [ 2.0 , "listy" , 3 ] を表 すとき alist [ 2 ] は文字列 " listy " を表します。 リストの部分リストをインデクスすることもできます。 さきほどの alist では、 alistC2:3] はリスト [ "listy", 3 ] を表します。 L [ n ] はリストのなかの単一要素を表すので L [ n ] に対して代入は可能ですが、 L の部分リストである L Cn:m には代入できません。 lcon のリストは可変長であり、リストに対する要素の追 加や削除が動的にできます。 lcon では、リストをスタック あるいはキューとみなして操作するための組込み関数が いくっか用意されています ( 図 1 参照 ) 。 UNIX MAGAZINE 1991.6
ワークステーションのおと一⑩ 移行の注意 同様なことを . bas c でしようとして、 と書くことがでぎます。 if ($?prompt 0 ) exit 断をするときには、 exit . cshrc のなかで対話型のシェルかどうかを判 実行すると止まらなくなります。 C シェルだと、 . cshrc のなかで which コマンドを の繰り返しになってしまうのてす。 5. ふたたび初期化のために . bashrc を読み込む する 4. そのスクリフ。トを bash が実行しようとして、 fork いシェルスクリフ。ト」をふたたび実行しようとする 3.. bashrc のなかの「実行するシェルを明示していな 込む 2. fork した bash が初期化のために . bashrc を読み 1. bash が fork する が fork して実行しようとするからてす。つまり、 これよ、実行するシェルが明示されていないと bash bash カ際限なく fork してしまい、終らなくなります。 クリフ。トを . bashrc のなかから実行しようとすると、 のように、実行するシェルを明示していないシェルス # ! /bin/sh シェルスクリプト先頭行に if [ "$PSI'I exit ー ] ; then とすると、以降のシェルスクリフ。トが実行されません。 これでは、 rsh コマンドを使ってリモートでコマンド を実行する場合に困ります。 1. rsh を起動する 2. リモートのホストのログインシェルも bash の場合、 bash が起動され . bashrc カ陝行される 3. 対話型のシェルではなし、ので exit が実行される 4. C シェルだと . cshrc の実行を終了して、 rsh で指 定されたコマンドを実行する UNIX MAGAZINE 1991.6 5. ところが、 bash では rsh から起動された bash が終 了してしまい、 rsh で指定されたコマンドは実行され ない となってしまうのてす。 て一茆から . bashrc では ー ] ; then 対話型シェルのときの処理 と書いておきます。 . twmrc など X のウインドウ・マネージャーでは、 ーからシェルコマンドが実行できます。多くは メニュ ログインシェルが実行するようになっているので、シェ ルの種類に依存した記述、たとえばリダイレクトなどは 書き換えなけれよいけません。 演算機能意外なことに、 C シェルのを使った演算 機能に相当するものがありません。 alias と function bash では alias で引数を渡す一 とができません。そのため、引数が必要なものは func- tion を使う必要があります。 C シェルで、 alias nless 'nkf \!*lless としていたものは、 nless ( ) { nkf $ 1 ー less } となります。 同じように、 alias cd ' set old=$cwd; chdir \ ! * ' alias back ' set back=$old; set old=$cwd, cd $back; unset back; pwd' も書き換えると、 cd ( ) { old=$cwd; chdir $ * } back ( ) { back=$old; old=$cvd, chdir $back ; unset back ; pwd } となります。ところが、 bash には chdir がないので、 chdir を cd に置き換えると、自分自身を呼び出して無 限ルーフ。に陥ってしまいます。 解決策を挙げておきましよう。まず、 builtin コマン builtin cd ドを使って、 101