出力 - みる会図書館


検索対象: UNIX MAGAZINE 1990年8月号
97件見つかりました。

1. UNIX MAGAZINE 1990年8月号

連載 / てくてく 17 1 メールが届いたら ログインしたとぎ、あなたにメールが届いている と次のようなメッセージが出てきます。 4.3BSD UNIX (rabbit) login: turtle Password Last login: Thu 」 un 21 10 : 42 : 54 BerkeIey VAX/UNIX 4.3BSD You have mail Erase is Ctrl-H Kill is Ctrl-U (turtle)% from 『メールを読もう』の中身 次に『メールを読もう』のだいたいの内容を書いて しまおう。ますは ma ⅱコマンドの起動だれこんな感 じでし、いかなあ。 \ sect 土 on { メールを読もう } \subsection{ メールを読む } % mail コマンドの起動とメールの読み方 メールを読むためには、 {\sf mail} という コマンドを使います。 UNIX のプロンプトか 出ているのを確認して、 {\sf mail} と \end{screen} (turtle)\% {\bf mail} \begin{screen}\sf 人力します。 1.1 メールを読む 1 メールを読もう UNIX MAGAZINE 1990.8 (turtle)% mail て、 mail と入力します。 います。 UNIX のフ。ロンフ。トが出ているのを確認し メールを読むためには、 mail というコマンドを使 コマンドを入力するときのリターンキーの入力も、 何か記号で示そうと思います。 rIFfX で出力できる記号 のなかから適当なのを選んでみることにします。 僕は、数式記号の \hookleftarrow( ) を使う ことにしました。 \begin{screen}\sf (turtle)\% {\bf mail} $\hookleftarrow$ \end{screen} (turtle)% mail ←一 ちなみに、 \hookleftarrow の前後にある $ を忘 れると、次のようなエラーになります。 ! Missing $ inserted. く inserted text> く tO be read again> \leftarrow \hookleftarrow —>\leftarrow \J0inre1 \rhook 1.45 (turtle)\% mail \hookleftarrow こで、数式記号であることに気がつけば、ソース ファイルを直せますよれ僕は、このエラーにもめげ すにリターンキーを押し続け、強制実行していた人を しっています。ちなみに、エラーで ? が表示されて るときにリターンキーを押すと、 ' IbX が適当に記号を 補ったり文字列を無視したりして処理を続行します。 コマンドの定義 僕の説明書のなかでは、これからもが頻繁に出 てくると思います。しかし、 \hookleftarrov は文 字数が多くていちいち入力するのが面倒です。そこで、 \ret というコマンドでが出力できるようにコマン ド定義しておくことにします。 \newcommand{\ret}{\mbox{$\hookleftarrow$}} 139

2. UNIX MAGAZINE 1990年8月号

連載 / てくてく価び 17 minipage 環境のあいたに \hspace{5mm} というの がありました。これも真似してみると、ようやく横に 並んでくれました。 次号では、はるみちゃんに minipage を教わること にします。とりあえす、このあとのページに僕の作っ た入力ファイルと出力の 1 ページぶんを載せておきま すれ 亀之助の欲張り ところでこういう説明って、ページの左半分に画面 の出力例を出して、右半分に説明文を書くといいと思 いません力、 ? I*TEX のマニュアルでも入出力例を左右 に並べていることだし、きっとできるにちがいない。 前に A 君からもらったい Tj 砂のソースのなかに ページの途中だけ 2 段組みにしているものがありまし た。それを見ると、 minipage という環境を使えばで きることが分かりました。 \begin{minipage}{7cm} \begin{screen}\sf (turtle) \ % {\bf mail} \return\\ Mai1 version 5 . 2 "/usr/spool/mail/turtle" 2 mesages $ > $ 1 tomoko@luna. om て on ・ co ・」 p $ > $ 2 harum—f@rdguru.ascii ・ co ・ JP \ & {\bf 1 } \ret \end{screen} \end{miniapge} ふたたび電話 H : もしもし、亀之助くん ? 亀 : うん。こんな夜遅くなあに ? H : こっちは朝なんだもん。 亀 : はるみちゃんのおかげで、僕はまだ帰れないんだ H : 亀之助くん、ありがとうれ 亀 : そういえば、はるみちゃんは出力する前に、アメリ 力に 98note を持っていって、向こうで原稿書くっ て言ってたらしいじゃない。 H : あ、あれ牙飃重いからやめちゃったの。それに、亀 之助くんに頼んじゃえばいいと思ったしさ。 亀 : あのねえ。 H : やつばり、亀之助くんは幀りになるなあ。 亀 : はるみちゃん、やたら明るいれ H : そんなことないよ。異国の地で苦労してるもの。 亀 : H : じゃ、がんばってね。亀之助くんの T シャツは ちゃんと買ったかられ ( ふじうら・はるみアスキー ) よ。 \begin{minipage}{7cm} すると、メールの差出人のアドレスや 届いた日付などが表示されます。 左隅に番号が付いていますから、読みたいメールの 番号を \ & のプロンプトの後ろに人力します。 \end{miniapge} (turtle)% mail ←一 Mail version 5.2 "/usr/spool/mail/turtle" : 2 mes.. > 1 t0m0k09 ん na. omron. co. 」 p > 2 harum-f@rdguru.ascii.co.」 p すると、メールの差出人のアドレスや届い た日付などが表示されます。左隅に番号が 付いていますから、読みたいメールの番号 を & のフ。ロンフ。トの後ろに入力します。 とりあえず、見よう見まねでやってみたのですが、左 右に並んでくれません。 A 君のソースをもう一度よくみてみると、 2 つの Y00 00 ~ 000 00L You have new mail. You have new mail. You have new maiJ u have new u % new mail. 140 UNIX MAGAZINE 1990.8

3. UNIX MAGAZINE 1990年8月号

連載 / てくてく rIbX 17 タイトルは、著者名 ( 僕の名前 ) と一緒に 1 ページ目 の先頭に出力します。これは、 \maketitle コマンド を使えばいいので簡単。 \documentstyle Ca4j ,llpt] {jarticle} \begin{document} \t itle{ メールを交換しよう ! } \author{ 作成・亀之助 } \ date { 1990 年 6 月 } \maketitle {\sf mail} コマンドを使って、メールを交換する \end{document} 紹介します。 ( メールを読む、メールを送る ) 方法を 1990 年 6 月 作成 : 亀之助 メールを交換しよう この説明書には、おもに次のような項目を書くつも どんなのにしようかな ルを読む、メールを送る ) 方法を紹介します。 mail コマンドを使って、メールを交換する ( メー ーメッセージの入力 ー送るメール冫コよタイトルを ! ー誰に送ろうか ・メールを送ろう ーメールを終了 ーメールを捨てる ーファイルに保存 ーメールを読む ・メールを読もう ・メールが届し、たら りてす。 ますは、上のようなタイトルをファイルに入力して UNIX MAGAZINE 1990.8 \subsection コマンドの引数にします。 しまいます。このとき、各タイトルは \section と \ sect 土 on { メールが届いたら } % "you have (new) mail" のメッセーシについて \section{ メールを読もう } \subsection{ メールを読む } Last login: Thu Jun 21 10 : 42 : 54 from Password: \ \ login: {\bf turtle}\\ 4.3BSD UNIX (rdguru) \ \ \begin{screen}\sf 次のようなメッセージが出てきます。 ログインしたとき、あなたにメールが届いていると \ sectio Ⅱ { メールが届いたら } 角の丸い四角で囲むことにします。 いので、 screen という環境を使って画面の出力例を また、説明文と画面の出力例とは区別して出力した 決めました。 体、自分で入力する文字列にはポールド体を使うことに 別することにします。僕は、画面の表示にはサンセリフ 列と勝手に表示される文字列は、フォントを変えて区 入れようと思います。このとき、自分で入力する文字 説明文のなかには、画面の出力例をところどころに いよいよ本文 whoi s コマンドについての説明 \subsection{ 誰に送ろうか } \section{ メールを送ろう } ma 土 1 の終了方法 \subsection{ メールを終了 } % 読んだメールを消去する方法 \subsection{ メールを捨てる } % 読んだメールをファイルに保存する方法 \subsection{ ファイルに保存 } mail コマンドの起動とメールの読み方 \end{screen} (turtle)\% Ki11 is Ctr1-U\\ Erase is Ctr1—H\\ You have mail\\ Berke1ey VAX/UNIX 4.3BSD\\ 137

4. UNIX MAGAZINE 1990年8月号

IJN Ⅸへの招待の リストー % cat shiyourei # ! /bin/csh # 入力形式をメッセージとして出す例 if ( $ # 矼空 = 0 ) then echO 'usage : shlyourei inputfile [outputfile] ' exit endif に等しければ引数が指定されすに実行されたことが分か る。 2)echo コマンドを使って、 UNIX MAGAZINE 1990.8 echo コマンドの一 n オプションと同し働きです ) 。 しますが、末尾で改行コードは出力されません ( BSD の な孑くがおこなえます。たとえは、 \ c では文字列をエコー 組込みコマンドのエコーの引数では、 \ を使ってさまざま 込みコマンドのそれには、機能面で大きな違いがあります。 ところで、実行イメージの echo コマンドとシェルの組 行されます。 SystemV の標準シェルでは組込みコマンドの echo が実 echo のようにパス名ではっきりと指定しないかぎり、 テムに実行イメージの echo があったとしても、 /bin/ 込みコマンドになっています。ですから、使っているシス SystemV では UNIX コマンドではなく、標準シェルの組 UNIX コマンドとして提供されています。しかし、 述のように、 UNIX のバージョンによっては echo か 次に、標準シェルでの echo について説明しましよう。則 ます ) 。 後に改行コードをエコーバックしません ( 具体例は彳し ションがありますが、これを指定すると引数をエコーした たときにも便利です。なお、 C シェルの echo には一 n オプ 処理をしたはうが実行時に確実ですし、使い方を忘れ ログラムを書く際は、先頭部分に入力形式をチェックする グラムは、この習慣 ( 流儀 ? ) を真似たものです。シェルプ というようなメッセージが出力されます。上のシェルプロ usage : date ト [ + fomat] CyymmddhhmC. ss]] というメッセージを出し、実行した人にコマンドの入力 usage : shxyourei inputfile [outputfile] 形式を教える。 3 ) exit コマンドでシェル、すなわちこのシェルプログラム の実行を終了する。 入力形式を間違えて UNIX のコマンドを実行すると、 # System V の echo の例 # ! /bin/sh % cat shecho 例を見てみましよう。 [—a sss. fff] コマンドによっては 7 例に挙けたもの以外にもたくさんあります。詳細はマニュアルを参照してくだ 一引用符で囲む必要があります。 用符として働いてしまうので、引数本を二重引用符や単 も説明しましたが ( 1990 年 2 月号参照 ) そのまま使うと引 を打ち消す引用符であることに注意してください。以前に ただし、これを使うときは \ がシェルのメタキャラクタ きます 7 ド echo では、 \ を使ってさまざまな文字をエコーバックで ます。このように SystemV の標準シェルの糸ムみコマン するというものです。また、 \ t ではタブ文字がエコーされ echo の引数で使用している \ n は、改行コードをエコー tel : ( 234 ) 5678 Aya Sakamoto % shecho % chmod 十 x shecho echo ) Aya Sakakamoto\nteI : \t ( 234 ) 5678 ' 157

5. UNIX MAGAZINE 1990年8月号

も不思議なことが 1 つあります。ー殳に、コマンドは C 言 語などのプログラミング言語を使って記述され、コンバイ ルとリンクをおこなった実行イメージのファイルとなって います。カーネルは実行イメージのファイルなら実行でき るのですが、それ以外の ( シェルプログラムのような ) たん なるテキストからなるファイルを直接実行することはでき ません。ログインシェルは、実行権があればファイルの内 容に関係なく ( シェルプログラムであろうが実行イメージ のコマンドであろうが ) カーネルに実行要求を出します。 一方、カーネルはファイルの内容が実行できなけれは・、ロ グインシェルに、、実行できませんにと返答し、コマンド を実行しません 3 。さて、こからがポイントです。カーネ ルからこのような返事が戻ってくると、ログインシェルは 実行要求を出したファイルの先頭の 1 行をちらっと覗きま す。そして、その行頭の文字が # でなければ、今度はカーネ ソ b ⅲ / sh を実行してください〃と依頼します。シェ ルプログラムが / b ⅲ / sh ( 標準シェル ) によって実行される 仕組みは、このようになっているのです。 次に、ログインシェルの子プロセスとして起動されたシ ェルがシェルプログラムを実行する仕組みを見てみましょ う。ログインシェルは、カーネルに "/bin/sh を実行して ください〃と依頼するとき、ユーサーがコマンド行で入力 したシェルプログラムの名前を / b ⅲ / sh の引数として渡 します。 C シェルでも標準シェルでも、シェルは引数なし で起動されると端末 ( 標準出力 ) にプロンプトを出力し、端 末 ( 標準入力 ) からの入力をコマンド行として読み込むこ とになっています。ログインシェルはユーザーがログイン UN Ⅸへの招待の した時点で引数なしに起動されるので、端末にプロンプト が表示されてコマンドが入力できるようになるのです。 れを、、、対話形式でのシェルの使用〃などと呼びます。シェ ルに引数としてオプションやファイル名などを指定して実 行することもできます。ここでは、とりあえすファイル名 の引数についてみていきます。 % csh commandfile のように引数でファイル名が指定されると、シェルはその ファイルの内容を読み込んで 1 行すつをコマンドとして解 釈し、それを実行します。 commandfile に date cal 7 1990 と記述されていたとすると、シェルは 1 行目に書かれてい る date コマンドを最初に実行し、次に 2 行目に書かれて いる cal 7 1990 を実行します。そして、ファイルの終り にくると自分自身を終了します。このように、シェルには 引数でファイル名を指定するとそのファイルの 1 行すつを コマンドとして実行する機能があります。 シェルプログラムを記したファイル名を入力すると、前 述したようにログインシェルが自ら / b ⅲ / sh を起動し、そ の引数としてプログラムのファイル名を渡してくれます。 新たに起動されたシェルは、 ( 引数としてファイル名が指定 されているので ) 端末からではなくファイルからコマンド を読み込んで実行するわけです。これが、子プロセスによ ってシェルプログラムが実行される仕組みです。 どのシェルで実行するか ? ログインシェルは、カーネルにコマンド実行を要求し、 カーネルから実行できないと知らされると子プロセスとし て /bin/sh を起動します。したがって、シェルプログラム は標準シェルによって実行されます。でも、これではちょ っと困ることがあるのです。 標準シェルと C シェルには、機能の違いがたくさんあり ます。たとえは・、 C シェルには工イリアスやヒストリーな どの機能、その機能に関係した alias 、 history などの組込 みコマンドがあります。しかし、標準シェルにはそのよう 3 しつは、 BSD 系の UNIX や SVR4 では先頭が ! 〃で始まるシェルプログラム はカーネルのなかで処理されます。 152 な機能もコマンドもありません。シェルプログラムのなか に、系ムみコマンド history をしたとしましよう。そ のプログラムが / b ⅲ / sh によって実行されると、標準シェ ルは history コマンドを知らないので思ったような実行 結果が得られません。次の例を見てください。 % cat mo Ⅱ dax 1 date history ーて 10 pwd % chmod 十 x mondaiari % mond 凾矼土 Fri Jun 3 14 : 16 : 05 JST 1990 mo Ⅱ d 矼土 : history: not found UNIX MAGAZINE 1990.8

6. UNIX MAGAZINE 1990年8月号

はじめに揃える道具 split による分割 特集 uuencode の実行結果は標準出力に出力されます。先頭 には begin で始まる行があり、もとのバイナリに復元した ときに書き込むファイルの名前 ( 2 番目の引数で指定した 名前 ) が書かれています。 2 行目以降が、バイナリを ASCII テキストに変換した結果です。 uuencode は、最後に end という行を出力します。 uudecode は、 begin から end ま でのあいだを処理の対象とします。 uuencode の結果は標準出力に出力されるので、パイプ を使ってそのままメールで送れます。また split による分 割が必要なときも、パイプでそのまま split に送れます。 % ls ー 1 169932 total uuencode した結果が 50KB を超えてしまうときには、 細かく分割して送ります。 split コマンドは通常、 split [ ー司分割するファイル名 のように使います。刃には、何行ごとに分割するかを指定 しますが、これを省略すると 1 , 000 行ごとに分割されま す。分割した結果は、 xaa 、 xab 、 xac ・・ に書き込まれます。 ・・というファイル 2 1 aya 84966 Jun 10 17 : 03 Aya. tar. Z. uuenco % split ー 800 Aya. tar. Z. uuenco % ls tota1 % wc 1373 800 573 2746 179 1 aya 1 aya 1 aya 966 Jun 10 17 : 03 Aya. tar. Z. uuenco 35408 Jun 10 17 : 04 xab 49558 Jun 10 17 : 04 xaa 4283 2801 1482 8566 84966 49558 xaa 35408 xab Aya. tar. Z. uuenco この例では Aya. tar. Z. uuenco が分割され、 xaa と xab の 2 つのファイルができています。それぞれ 50KB 以 内に収まっているので、この 2 つはメールで送ることがで きます。 split の結果をメールで送るときは、メールの Subject: のところにファイル名を入れておきましよう。たとえは、 % mail aya く xab % ma11 aya く xaa ド foreach を使うことです。次の例を参考にしてくださ できません ) 。もっとも簡単な方法は、 csh の糸Ⅲムみコマン ん ( もちろん、もとどおりの順番でつながないと uudecode はどの順番でファイルを連結したらよいのかが分かりませ のようにサプジェクトをつけすに送ると、受け取ったほう し ) % foreach f (xaa xab) > m 矼 1 —s "$i" aya く $i > end しましよう。その場合には、次のようにコマンドを実行し ディレクトリ Ageru にあるファイルすべてを配布すると つのコマンド行でかたづけることもできます。たとえは、 の手順を説明しました。一連の作業は、パイプを使って 1 メールで送るために compress 、 uuencode を用いるまで こまでに、 tar でアーカイプ・ファイルを作り、それを ta 「→ comp 「 ess → uuencode → mail ル名とサプジェクトの文字列の両方に使っています。 こでは、 1 つの変数を mail コマンドへの入力ファイ ます。 % tar cf ー Ageru ー compress ー uuencode Ageru. tar. Z ー mail aya tar の f オプションに 〃を指定すると、アーカイプ・ ファイルは標準出力に出力されます。 compress は、引数で ファイル名が指定されないときには標準入力を読み込み、 UNIX MAGAZINE 1990.8 圧縮した結果を標準出力に出力します ounencode は、引数 2 オプションを指定すれば、これ以外のファイルに書き込むことも可能です。 109

7. UNIX MAGAZINE 1990年8月号

めるときは注意が必要です。これらをサポートしている shar としていないものがあるからです。また、日本語を含 むファイルを shar のアーカイプにそのまま含めると、メ ールの酉占中にコード変換される可能性があります。コー ド変換されたくないときは、アーカイプにする際、該当フ ァイルをバイナリとして扱う必要があります。 、懈凍″の手順 配布されたものをもとの状態に戻すことを、、解凍〃と呼 んだりします。以降では、その方法を紹介します。最初に tar 、 compres uuencode で作られたもの、次に shar で 作られたものについて説明します。 uudecode でノヾイナリに戻す uuencode の結果は、 uudecode というコマンドで元の バイナリイメージに戻します。これは、 uudecode [ ファイル名 ] という形式で使います。 、、ファイル名〃には、 uuencode で作られたファイルを指定 します。これが uudecode への入力となりますが、省略す ると標準入力か読み込まれます。 uudecode は入力のうち begin と end のあいだの行しか処理しません。ですから、 メールで送られた uuencode のファイルは、メールのヘッ ダを含んだままでも uudecode の入力に与えることがで きます。 uudecode の結果は、 begin の行に書かれているファイ ル名のファイルに書き込まれます。結果か標準出力に出力 されることはありません。 uudecode はもともと ASCII テキストをバイナリテキストに戻すためのコマンドなので、 結果を標準出力の端末に表示しては問題があるからです。 uudecode の結果をパイプではかのコマンドに渡せないの は少々不便な気がしますが、使用時にはこの点に注意して ください。 zcat/uncomp 「 ess てもとに戻して ta 「 uudecode でバイナリを作ったら、次の作業に移ります。 配布した人がメールの先頭部分にでも解凍方法を書いて いたら、その後で何をしたらよいかが分かりますが、そう UNIX MAGAZINE 1990.8 はじめに揃える道具特集 でなければ uudecode が作成したファイル名を頼りに判 断します。 x x x . tar というファイル名なら tar コマンド でアーカイプからファイルを取り出し、 x x x . tar. Z とい うファイル名なら圧縮を解いてから tar コマンドを使い ます。 ソースを受け取った人はこのように東作業を進めるの で、提供する人はファイル名の付け方や送るときのメッセ ージにも気を遣いたいものです。 圧縮したファイルは復元して使えるのはもちろんです が、復元せすにそのまま使うこともできます。前者には uncompress, 後者には zcat というコマンドを使います。 コマンドの入力形式は次のとおりです。 zcat ファイル名 uncompress ファイ丿レ名 引数の、、ファイル名〃には、 . Z をつけてもつけなくてもか まいません。省略すると、 zcat や uncompress はファイル 名の後に . Z を補ってくれます。 では、 uncompress の使い方からみていきます。 uncom- press は引数で指定したファイルを復元し、その結果を . Z を取り除いた圧縮前のファイル名で作成します。そして、 復元が終了した段階で、圧縮したファイル ( . Z ファイル ) は削除されます。 % ls Aya. tar. Z % uncompress Aya. tar % ls Aya. tar なお、 uncompress の実行時に書き込もうとしたファイ ルと同名のファイルがあると、、、上書きしてもいいです か ? クというメッセージが表小されます。これに対して、、 y 〃 と答えれば復元が実行され、それ以外を答えると復元され ません。 uncompress でもとに戻したら、次は tar を使ってアー カイプからファイルを取り出します。この場合、 tar は次の ように使います。 tar xvf ファイル名 tar のオプション x は、アーカイプ・ファイルから個々の ファイルを取り出すためのものです。 f の後ろにはアーカ 111

8. UNIX MAGAZINE 1990年8月号

特集 フリーソフトウェアでグレードアップ 、ゝきは、ファイルをいったん作っておいたほうが手間が省け てよいかもしれません。 なお、 uuencode した結果が 50KB を超えてしまうよう な場合には、 復元したときにつけ が 1 つ ( 前例では Ageru. tar. Z る名前 ) であれば標準入力を読み込みます。 この方法を利用すれは・、アーカイプ・ファイルをディス クに作らすにすみます。しかし、何度も配布するようなと % tar cf ー Ageru ー compress ー uuencode Ageru. tar. Z ー split 、ゝ作成・提供されているコマンドです。 shar は SHeII AR- などのように分割して送ってください。 split はファイル名 chive を略して付けた名前ですが、その名のとおり複数の が指定されなければ標準入力を読み取り、その内容を分割 ファイルをまとめて ASCII テキストのシェルプログラム します。 を作ります。 shar には、機能の異なるさまざまなバージョ sha 「でアーカイプを作る ンがあります ( 詳細は shar の説明を参照してください ) 。 shar の使い方は簡単です。引数にまとめるファイルを指 tar 、 compress, uuencode 、 split は、 UNIX に標準で 定します。 備わっています。一方 shar は、フリーソフトウェアとして / % shar README MakefiIe malli. c # ! /bin/sh # lhis is a shell archive. Remove anything before this line , then unpack # it by saving it into a file 田 ld typing "sh file" TO overwrite existing # files , type "sh file -c't You c 田 1 so feed this as standard input via # unshar, or by typing "sh く file't , e. g ・ If this archive is complete , you # will see the following message at the end: " ld of shell archive # Contents : AD ト正 Makefi1e main. c # Wrapped by aya-s@pbumag00 0 Ⅱ Sun Jun 10 17 : 30 : 54 1990 PATH=/b in : /usr/bin : /usr/ucb ; export PATH if test -f 'README' -a " $ { 1 } " ! = then echo shar : WiII not clobber existing file \ " 'README ' \' else echo shar : Extracting \ " ' AD ト旧 ' \ " \ ( 37 characters\) sed "s/AX//" > ' R 上 A 以化 ' くぐ日の OF-FILE' X 単純に make してください END_OF_FILE 、、 X 〃は、元に戻すときに sed によって削除されます。 shar の結果は、標準出力に出力されます。上の例では、 shar は ASCII テキストを標準出力に出力しますから、 README 、 Makefile 、 main. c という 3 つのファイルを 結果をパイプで mail に渡せは直接メールを送ることがで まとめていますが、先頭に出力されるシェルのコメント行 きます。 には、その旨が表示されています。 shar は、 sed とシェル の系Ⅲムみデータを使ってファイルをまとめています。例で % shar AD ト正 MakefiIe maxn. c ー ma11 aya は、 shar のよいところは、 tar よりも操作が簡単なことと作 sed "s/AX//'f > ' AD ト旧 ' くぐ END_OF—FILE ' ったアーカイプをシェルで復元できることの 2 点です。そ X 単純に make してください のため、 unshar がない受取先でもファイルを取り出すこ END-OF_FILE とができます。 一方、 shar でバイナリやディレクトリをアーカイプに含 のうち、 2 ~ 4 行目までが README の内容です。行頭の 110 UNIX MAGAZINE 1990.8

9. UNIX MAGAZINE 1990年8月号

UN Ⅸへの招待の お答えください一実行時の入力 ファイルを削除する rm コマンドで -i オプションを指 定すると、ファイルを消してもよいかどうかを訊ねるメッ セージが出力されます。ューサーは、これに対して、、 y 〃も しくは、、 n 〃と答えます。 -i は interactive( 対話形式 ) とい うオプションで、その名のとおり対話形式でコマンドを実 行するものです。 シェルプログラムでも、メッセージを表小し、ユーサー からの返答に応して実行を進める対話形式のプログラムが 書けます。メッセージの表示方法は前述したとおりです。 ただ、回答を求めてメッセージを表示するので、通常は改 行をエコーしません。そこで、 C シェルの echo なら、 echo —n ' Okotae kudasai ー > ) のように一 n オプションを、 SystemV の標準シェルの echo であれば \ と c を使います。 echo ' Okotae kudasai ー > \c ' では、答をもらうーーっまり、ユーサーからの入力をプ ログラム実行時に読み込むにはどのようにすれはよいので しようか ? これにも , さまざまな方法があります。ます、 C シェルから見ていきます。 C シェルでは、 $ くという記号 を使います。 % cat input # ! /bin/csh # シェルプログラムへの入力 echO —n 'P1ease input (y or Ⅱ ) = > ' echo Kotae ha $ く % chmod + x input % input P1ease input (y or Ⅱ ) = > y く - 腿 K0tae ha y シェルはコマンド行で $ 変数名という文字列を検出する と、これをヾ変数名〃で指定された変数の値に置き換えま す。たとえは、 echo $home では、変数 home に代入されている値 ( ホームディレクト 158 リの絶対パス名 ) がエコーバックされます。このように、シ ェルでは $ は変数の値を置き換えるためのメタキャラクタ です。 $ くもこれと同しです。、、ぐは変数名ではありません が、シェルは $ くという文字列を検出すると標準入力からの 入力を待つ状態になり、入力がおこなわれると入力された ものを $ くの部分に置き換えます。 上の例では、最初の echo コマンドで ( 改行なしに ) メッ セージを出力します。 2 番目の echo コマンドは引数とし て $ くを使い、標準入力からの入力をエコーバックします。 この行をシェルが実行しようとしたとき、引数で $ に続い てくが使われているので、シェルはこの部分を展開するた めに標準入力からの入力を待つ状態になります。このとき、 ューサーは端末から何か入力します。例では、 y を入力して く RETURN 〉キーを押しています。シェルに送られるの は、入力を始めた部分からく RETURN > キーを押すまでの あいだに入力した文字列です。これを受け取ったシェルは、 $ くの部分にそのまま置き換えてコマンドを実行します。 の結果、 2 番目の echo コマンドからは入力した文字列が (Kotae ha とともに ) そのまま工コーされました。 この例は入力されたものを単純にエコーバックするだけ ですから、入力した文字列は echo コマンドの引数として だけ使用しました。しかし、入力した文字列をプログラム のなかで何回か使うケースも考えられます。このような場 合には、入力されたものをどこかにとっておく必要があり ます。プログラム中でどこかにデータを保存する場合には、 一般に、、変数〃を使います。シェルで使用する変数につい こでは入力したものを保存す ては次号で説明しますが、 る方法だけを紹介しておきます。 プログラム中で使う変数の扱いは、シェル変数とまった く同しです。変数の設定は、 set 変数名 = 値 の形式でおこないます。変数名の部分でシェル変数を指定 するとシェル変数の設定になりますし、シェル変数以外を 指定すると自分固有の変数が設定できます。たとえば、 set prompt="***" では、シェル変数 prompt に値として、、 * * * 〃を代入し UNIX MAGAZINE 1990.8

10. UNIX MAGAZINE 1990年8月号

ネットワーク時代のワークステーション管理 きるのは host という単項のみであり、 host. domain 形式 のアドレスは対象外になります。また、 2 ) と 3 ) の機能は BIND の MX レコードを参照する senmdail.mx を使用 した場合には利用できません。 mailconf sendmail.cf を独力で変更していく作業は、なにかとた いへんです。分かりにくい文法になっていることもあり、 はじめて触れる人には手に負えない代物とさえいえます。 そこで、各システムに応して sendmail.cf の設定を簡単 におこなうためのツールがいくっか作られました。 mail- conf はその 1 つであり、とくに JUNET での利用を意識 して作成されているので、 JUNET では標準キットとして 配布されています。いくつかの ( 国内の ) メーカーが出して いる UNIX システムでは、 PDS の 1 っとして提供されて いるようです。現在、一般に出回っている最新版は 6.4J. 6 というルーノレヾージョンのものです。このノヾージョン番 号は Received: フィールドに表示されるので、すぐに確認 ■ 現在のバージョンは、 できます。 ・ NIS への対応力坏十分 ・ BIND サーバーに対応していない ・多数のシステムか接続されたネットワーク環境では設定 ・ドキュメントカ坏完全 ・ JUNET 環境以外での動作確認が不十分 が面倒 32 sendmail. cf が作成可能になることになっています ( いろ リースされ、 MX レコードを参照できるように拡張された なお、 mailconf は新しいバージョンが今夏までにはリ します。 SunOS でのドメインマスターの設定例と同し機能を実現 対応する sendmail. cf を出力します。この例は、前述の mailconf は基本的にリスト 2 のような入力記述を読み、 は手短かに概略だけを説明します。 mailconf の話も全部書くと長くなりますから、 ではまだ十分に実用に耐えると思います。 などの問題を含んでいますが、 JUNET の一般的なサイト いろ不備が多くなったので、全面的な書き直しを進めてい ます ) 。 sendmail の入手 最初に書いたとおり、今では数多くの UNIX システム 上で sendmail か動作しており、手持ちのシステムへ新た にインストールする必要はほとんどありません。しかし、 不幸にして sendmail がない場合には、そのソースコード を入手することもできます。もちろん、入手したからとい ってすぐ動くという保証はありません ( BSD 系の UNIX システムならばたいした問題もなく動きそうですが、元来 BSD 系システムは sendmail を標準でもっていますので、 このような作業は不要です ) 。 あるいは、現在のバージョンが古いので、新しいものに 替えたいこともあるかもしれません。現在、筆者の手元に あるソースのバージョンは 5.64 です。これも anony- mous ftp などで各所から入手できます。 こでとりあげた mailconf も、 anonymous ftp で提 供している組織があるようです。また、現在 JUNET に参 加している組織は、ほとんどがプログラムをもっていると 田われます。 ■おわりに 今回は sendmail を中心に説明しましたが、なにしろ Communication Notes でも 3 回を費やしているほどで すから、とても全部は説明できません。話が抽象的で分か りにくいところがあるとは思いますが、詳細については過 去の連載などを参照してください ( あるいは、そのうちにま た説明の機会があるかもしれません ) 。 sendmail 自体は現在のように多数のワークステーショ ンか読々と導入されるようになる以前に設計されたものな ので、その仕様のあちこちに古さが目立ってきました。し かし、現在のところそれに代わるメール酉当医のためのソフ トウェアは出てきていません。 sendmail 以外にも smail などのメール酉占医のための仕組みがありますが、メーカー カ噸準でサポートしているものではありません。今後しば らくは、このややこしい仕組みを使っていかなくてはなら ないようです。 UNIX MAGAZINE 1990.8