連載 / てくてく rIbX います。 31 では、実際に list 環境を使ってみましよう。 {\tt list } 環境を使ってみましよう。 \verbl\iteml コマンドのオプション引数には、 ラベルを指定します。 \begin{list}{}{} \itemC*] 星のラベル ラベルなし \item \item[ ◎ ] ニ重まる \end{list} オプション引数がないと、 ラベルには何も出力されません。 list 環境を使ってみましよう。 \item コマンドのオプ ション引数には、ラベルを指定します。 せん。 オプション引数がないと、 ◎二重まる ラベルなし ☆ 星のラベノレ さきはども書いたように、 list 環境の最初の引数に ラベルには何も出力されま itemize 環境を自分で定義すると次のようになるでし は \endlist コマンドを実行します。したがって、 \begin{list} は \list コマンドを、 \end{list} 境では、 ここに $\bullet$ を指定しているのです。 出力されるラベルを指定します。たとえßitemize 環 は \item コマンドでオプション引数を省略したときに \newenvironment{itemize}% \item [ ☆ ] 3 つ目は、星のラベルにしてみました。 \item 2 つ目もデフォルトです \item 1 つ目はテフォルトのラベルにしましよう。 \begin{itemize} です。 を指定すれば、デフォルト以外のラベルが出力できるの itemize 環境でも \item コマンドにオプション引数 プション引数でラベルが指定できます。ということは、 \list 環境のなかの \item コマンドでは、つねにオ {\list{$\bullet$}{}}{\endlist} 134 \end{itemize} 1 つ目はデフォルトのラベルにしましよう。 2 つ目もデフォルトです。 3 つ目は、星のラベルにしてみました。 enumerate 環境のようにラベルに番号を付けたいと きには、カウンタを指定する必要があります。 / 勧 e / 引数 には、 \arabic や \roman などのカウンタの値を出力 するコマンドを使ってラベルとして出力する数字の種類 を指定します。そして、 2 つ目の引数に \usecounter というコマンドで使用するカウンタ名を指定してくださ \usecounter コマンドでカウンタを指定すると、オ プション引数のない \item コマンドで、 1 っすっカウ ンタの値か増えていきます。ただし、使用するカウンタ は、あらかじめ \newcounter コマンドでカウンタであ ることを宣言したものでなければなりません。 カウンタを使ったラベルの例です。 ほら、簡単、簡単。 \newcounter{listcnt} \begin{list}{$*$\roman{listcnt}$*$}% {\usecounter{listcnt}} \item カウンタの値は 1 から始まります \item \verbl\iteml コマンドで、 カウンタの値が自動的に増えていきます。 \itemC+] でも、オプション引数があると・・ \item カウンタの値は増えません。 \end{list} カウンタを使ったラベルの例です。はら、簡単、簡単。 *i* カウンタの値は 1 から始まります。 * ⅱ * \ item コマンドで、カウンタの値が自動的に増え ていきます。 ☆でも、オプション引数があると・・ * ⅲ * カウンタの値は増えません。 enumerate 環境では、 enumi という名則のカウンタ を使用しています。ですから、次のような定義になって いるはすです。 UNIX MAGAZINE 1992.3
イルから作成されると指定しているのです。このとき、 コロン ( : ) の左側に指定したファイル ( main ) は、ター ゲット " と呼はれることもあります。 2 行目は、実際に ファイルを作成するために実行する処理です。この処 理のことを、、インストラクション " とも呼びます。この 場合には、 main というプログラムを作成するために "cc ー 0 main main. c sub. c ”という処理を実行すること を示しています。 2 行目の先頭はタブ文字です。 make コマンドは、先頭がタブとなっているかどうかで依存 関係の指定なのかインストラクションの指定なのかを 判定します。インストラクションを指定する場合には、 先頭文字をタブとすることを忘れないでください。さも ないと、 make がうまく実行できません。 さて、実際に make コマンドを使ってみましよう。 Makefile はすでに準備しましたから、 main. c と sub. c というファイルを準備してください。内容は、次のよう な簡単なもので十分です。 ma1 Ⅱ . 0 sub . 0 % cat main . C main ( ) sub ( ) ; % cat sub. c sub ( ) この状態では、 printf ぐ ルが存在しているはすです。 % ls Makefi1e main . c このディレクトリには 3 つのファイ . C sub\n") ; 'sub sub sub 準備か整ったら、実際に make コマンドを使ってみ ましよう。コマンド行で、 "make ”と入力してみてく ださい。すると、 make コマンドは指定されたインスト ラクションを実行し、 main というプログラムを作成し てくれるはすです。このとき、画面には実行したイン ストラクションが表示されます。ちょっとやってみま しよう。 % make CC ー 0 maln maln . C malll . C : sub . C : % ls —F Makefi1e 128 malll . C sub . C sub . C make コマンドがファイルのコンパイル処理をおこな い、 main というプログラムが作成されていることが分 かるでしようか。 コマンドの再実行 こで、もう 1 回 make コマンドを実行してみます。 今度は何も実行されすに“ 'main' is up to date. ”と 表示されたはすです。 これは、 make コマンドのもう 1 つの重要な機能を 表しています。 make コマンドは、不要だと思ったら プログラムの作成はおこないません。作成する / しない は、さきほど記述した Makefile の先頭行の情報 つまり依存関係の情報をもとに判断します。さきほど の MakefiIe では、 main を作るには main. c と sub. c が必要 と指定しました。 make コマンドはこの情報の見方を変 えて、 main は main. c や sub. c か新しくなったら作りなお す必要があるが、 main. c や sub. c よりも main のは うカ噺しければ ma ⅲを再作成する必要はない と判断するのです。 UNIX では、ファイルの作成時刻 や最後に参照した時刻、最後に更新した時刻などがファ UNIX MAGAZINE 1992.3 printf ( "main main\n" ) ; sub(); printf ( "main main\n" ) ; main() % cat main. C % Vi main. C is up tO date . % make えてから実行してみましよう。 試しに ma ⅲ . c ファイルを編集し、最終更辛刻を変 るのです。 してインストラクションを実行するかどうかを判断す 刻 ) をファイルシステムから取り出し、その時刻を上交 関連するファイルを最後に更新した時刻 ( 最終更新時 イルシステムに保存されています。 make コマンドは、
RISC/os (UMIPS) 4 . 52 umws01 (C) Copyright 1986 ー 1990 , MIPS Computer Systems A11 Rights Reserved ( この部分に、編集部からのお知らせ、メンテナンスの予定など のメッセージが入る場合もあります ) We1come to UNIX MAGAZINE file archive/distribution service WEnet : などのメッセージが表示され、 WEnet のコマンド・モード に入ります。接続されすに電話回線が切れる、文字が化け る、ログイン・プロンプトが表示されないなどの場合に は、モデムの設定などをもう 1 度確認してください。 なお、ログインした状態で 1 分間以上なにも操作しない 利用方法 と、自動的に回線が切断されます。 164 ダウンロードに使用するファイル転送プロトコルの設 ymodem の砺引 kermit] ー xmodem のー proto cnone ー xmodem ・ダウンロード操作 テキスト形式ファイルの内容表示 cat 万ん s. ・ファイル操作 カレント・ディレクトリの表示 pw d カレント・ディレクトリの変更 cd 市 0 ディレクトリ内容の表示 ()s コマンドと同し ) dir [ 川市 ] ディレクトリ内容の表示 ls [ 万ん一市。 ] ・ディレクトリ操作 す。 コマンド・モードから使えるコマンドは以下のとおりで ンド体系のサプセットになっています。 ダウンロードに関連するコマンドは、 UNIX の ftp のコマ をかなり限定したものになっています。また、ファイルの WEnet のコマンド・モードは、 UNIX のシェルの機能 定。オプションの意味は以下のとおり。 xmodem moder れ 7 xmodem lk modem7 none XI れ ()der れ xmodem lk ファイル転送にプロトコル を使用しない xmodem (CRC) を使用 xm 日れをロングバケット・ モード ( IKB / バケット ) で 使用 x m 0 d e m を m 0 d e m 7 batch モードて使用 xmodem をロングノヾケッ トと modem7 batch との 両モードで使用 ymodemC1k] Cmodem7] ymodem を使用 ( lk 、 modem7 も設定可能 ) kermit を使用 k ermit binary バイナリ形式のファイルを転送 text テキスト形式のファイルを転送 ( 以上 3 つのコマンドは、次の get コマンドを使う前に set help [ じ 0 ”れ田 ・ヘノレプ プロトコル、ファイルモードの設定を確認 ファイルの転送を開始 get 万ん 4 襯 e.. 使用する ) UNIX MAGAZINE 1992.3 れる ) を指定すると、そのコマンドの詳しい使用法が表示さ 利用可能なコマンドの一覧を表示 ( 引数に c 。〃〃イ
連載 / てくてく 31 ところで、 \item コマンドではラベルを出力すると き、次のような形式で \ m elabel というコマンドを呼 び出します。 \makelabel{label} label は、 \item コマンドのオプション引数が指定さ れていればその内容、指定されていなければ list 環境 の最初の引数になります。 \let というコマンドは \def に似ていますが、ある コマンドと別のコマンドを同じ意味にするときに使いま す。同じ意味のコマンドですから、もちろん引数の数も 同じです。則ページの例でいうと、 \makelabel コマン ドを引数も含めて \descriptionlabel コマンドと同 しものにしています。 \descriptionlabel コマンドでは、引数に指定され た文字列をポールド体で出力するようになっています。 最初にある \hspace コマンドは、ラベルの出力位置を 環境の外側のテキストの位置に合わせるために挿入され sweetdesc をイ乍ろう ています。 すから、次のように指定してこの 2 つのパラメー parindent は \parindent となっています。で はリスト環境内だけで有効な \parskip 、 \list- の引数でしか変更できません。ただし、 \parsep list 環境のパラメータは、 list 環境の 2 つ目 ついでのお話 width より長くなります。 belwidth が 0pt ですから、どのラベルも \label- デフォルトの description 環境の定義では、 \la- 138 \end{itemize} \item やってみてください。 変更できます。 \item このようにすれば、項目間のスペースか \parskip 0pt \parindent lOPt \begin{itemize} タを変更することができます。 図 3 ラベルの長さとパラメータの関係 \labelwidth = 0 UNIX MAGAZINE 1992.3 \item[ 大福 ] 大福食べたい \begin{sweetdesc} \let\endsweetdesc\endlist \let\makelabel\sweetlabel}} \advance\leftmargin\labelsep {\labelwidth 7zw \leftmargin\labelwidth \def\sweetdesc{\list{}% \def\sweetlabel#l{\bf #l\hfill} してください。 ルの後ろに \hfill を挿入してスペースを入れるように きは、 underfu Ⅱになってしまいます。この場合、ラベ す。ですから、 \labelwidth 幅よりもラベルが短いと ンドは \ label ⅵ dth 幅のポックスのなかに出力されま した長さにしておきましよう。また、 \makelabel コマ \leftmargin は、 \labelwidth と \labelsep を足 に合わせた長さにしなければなりません。 ような出力になってしまいます。 \leftmargin もそれ う。ただし、それだけではラベルだけ左側にはみ出した とりあえす漢字 7 文字ぶんに設定することにしましょ から始まるようにしたいのですから、 \labelwidth を sweetdesc 環境では、各項目のテキストが同し位置 始まる位置がバラバラになってしまいます。 ックスの右側にはみ出して出力されるので、テキストの えてみてください。ラベルの長さによってラベル用のポ list 環境で、ラベルがポックスをはみ出す場合を考 \leftmargin まります。 ~ 一ベルがないときには、文章がここから始 \labelsep ほかの行はここから始まります。 し一 \ abelsep ラベレ こから文章が始まります。
すが、去も匠はメニュー方式て操作できる ftp もあります。 PC-NFS のサイズが小さくなって UNIX のディスクを 常時マウントできるようになれは、 ftp の重要度は低下し ていくでしよう。 代 p のようにファイルを送受信するだけの叫屯なソフト ウェアは、各社のコマンドか 1 司しだといいのですが、そう うまくいかないのが実情です。どちらのカードにも約 40 個のコマンドが用意されており、そのうち約 30 個が同し 名称です。 Net/One TCP—PC と EXOS Host Access のコマ ンドリストを、表 1 ~ 2 に示します。 同名のコマンドでも、操作方法が違うことがあるの で注意してください。 たとえば prompt コマンドは、 Net/One では ON と OFF を引数で指定しますが、 EXOS では実行のたびに状態か反転します。 cd 、 dir 、 pwd などのリモートマシンとローカルマシン の両方で実行するコマンドは、先頭に local を表す I( 工 ル ) を付けて区別しています。 複数のファイルを処理する mget 、 mput 、 mdelete な どのコマンドは、 m ⅲ tiple の m か付いています。これら は、 pr 。 mpt が ON になっていると、該当するファイル 名の処理を順番に問い合わせてきます。 prompt が OFF の場合はそのまま実行します。 ftp の便利な機能 ftp のなかから、 DOS のコマンドを実行したり、 DOS のコマンド・プロンプトに入ることができます。これは、 転送するファイルを捜しながら作業するときなどに便利 です。 ftp のフロンプトで ! を入力すると、 DOS プロン プトに変わります。コマンドを実行するだけなら、 ! に続 けてコマンドを入力します。 ftp は、入力、出力ともにファイルにリダイレクトでき ます。入力リダイレクトでログインや操作手順を書いた ファイルを読み込み、出力リダイレクトで処理の過程を ファイルに書き出すようにすれは、自動運転も可能です。 ftp の使用上の注意 PC-NFS と同様、 DOS と UNIX でファイル名の規 則の違いが問題になることがあります。 ftp の種類にもよ りますが、エラーで処理を中断するものと、ファイル名を 訊きなおしてくるものがあります。 92 また、ローカル (PC) 側のファイル名の指定で、ドラ イプ名を指定できるものとできないものがあります。この 場合は、カレントドライプをローカル側の転送先 ( または 転送元 ) のドライプに移してから ftp を起動するか、 ftp のなかで lcd コマンドを使ってカレントドライプを変更 してください。 ftp の使用例 FTP ー Fi1e Transfer Program Copyright (c) Ungermann—Bass, lnc . 1986. A11 rights reserved. FTP> open myunix Connected tO myunix FROM HOST: 220 myunix FTP server (SunOS 4.1 ) ready. User : kuma FROM HOST: 331 Passvord required for kuma. Password: FROM HOST: 230 User kuma logged in ・ FTP>1cd f :*test F : *TEST FTP> cd sample FROM HOST: 250 CWD command successful . FTP>get to 10Ca1 file: dist FROM HOST: 200 PORT command successful . FROM HOST: 150 ASCII data connection for source ( 133. XXX. YYY. ZZZ , 45768 ) ( 8771 bytes) . FROM HOST: 226 ASCII Transfer complete. 9002 bytes transferred in 0 .01 seconds— 9002000 bytes per second FTP>quit FROM HOST: 221 Goodbye. コマンドを実行したとき、機能するのがローカルなの かリモートなのかをよく考えて使いましよう。ローカ ルのつもりで実行したコマンドで、リモートのファイ ルを消したりすると困ります。 rsh の設定方法 UNIX と同様の r コマンドが使えるものもあります。 ただし、 UNIX と PC の両方で設定が必喫です。 UNIX での言聢 ます、 UNIX 側で rshd が動いている必要がありま す。 SunOS 4.1.1 の場合は inetd て起動しますから、 /etc/inetd. conf を調べます。リスト 1 のようになっ ていれば大丈夫です。 重川 1 功蔀寉認できたら、ほかの UNIX マシンからの r コ マンドの実行許可と同しガ去で登録します。つまり、 ・ /etc/hosts. equiv ファイルに PC のホスト名を登 ・ホームディレクトリの . て h 。 sts ファイルに PC を登録 のいすれかをおこなう必要があります。 A> UNIX MAGAZINE 1992.3
を作成するための規則カ甘旨定されていますから、その規 則を使って make コマンドがオプジェノト・ファイル を作成し、必要なファイルか揃ったところで最終的な プログラム main を作成します。 作成するプログラム さきほどの例では、 main というプログラムを作成す るために make コマンドを起動していました。しかし、 このとき main というプログラムを作成するという指 定はしていません。 make コマンドに与えている情報 は Makefile だけです。しつは、 make コマンドがこの Makefile に書かれた情報をもとにどのようなプログラ ムを作成しようとしているのかを判断するのです。 判断するとはいっても、人間が判断するわけではあ 直接的な依存関係にだけ注目すればよいのも、 make りませんから簡単な判断方法を用いています。人間が コマンドを使用する利点といえるでしよう。ここで挙げ 見れば、それぞれの依存関係から最終的に作成したい た例はごく単純なものなので、依存関係の指定もさはど コマンドは ma ⅲだと分かるかもしれませんが、 make 難しくはありませんが、もっと複雑なプログラムを作成 コマンドはそれはど複雑なことはしないのです。 make するときはかなり大変な作業になります。でもこの例の コマンドは MakefiIe の最初に指定してある依存関係指 ようにソースファイルとオプジェクト・ファイルの関 定の行のターゲットを作成するのだと判断するのです。 係、オプジェクト・ファイルとプログラムの関係とい さきほどの例では依存関係指定のターゲットとなって うように細かく区切って指定すれは、意外と簡単に指定 いるファイルは main 、 ma ⅲ .0 、 sub. 0 の 3 つでした できます。 が、そのうちの先頭のもの、つまり main を作成する せつかくオプジェクト・ファイルを使う Makefile を プログラムと判断してこの main というプログラムを 書いたので、 main. c をもう 1 度編集して make コマン 作成するための処理をおこなったのです。 ドを実行し、その効果のほどを確かめてみましよう。 make コマンドに対してどのプログラムを作成するよ うに指定するかという意味では、この Makefile のなか % Vi main. C での順番が間題となります。しかしそれ以外の部分で は、 Makefile 中に書かれる情報の順番に意味はありま せん。たとえば前述の例では、 main. 0 と sub. 0 に関す る部分、つまり 4 ~ 5 行目と 7 ~ 8 行目を入れ替えても make コマンドの動作はまったく同しです。 Makefile をこのように変更し、ソースフティルと Makefile しか main. c の [ 再、コンノヾイノレと main の 今度はちゃんと ない状態で make コマンドを実行しても、 再作成だけの処理をおこない、 sub. 。の再コンパイルは おこないませんでした。このように、一部のファイルを % make C C ー C . ℃ 編集した場合、関連する ( 依存する ) ファイルだけを処 CC —C sub . C 理するのが make コマンドの大きな利点です。 CC ー 0 ma11i ma111.0 sub . 0 この例題から、 MakefiIe の適正な記述の重要性がお と前例と同様に実行されます。 sub. 。の処理をしてから 分かりいただけたでしようか。最初の例のように た んにソースとプログラムの依存関係を指定しただけで main. 。の処理をしてもよいようにも感じますが、 main は make の機能の一部しか使っていないことになりま の依存関係の指定で main. 。が sub. 。よりもさきに記 されているので、このような順番で実行されるのです。 す。すこし面倒ですが、あとで示した例のように各ファ 依存関係指定の行では、ターゲットを作成するために イル間の依存関係を正確に記述して初めて make コマ 必要なファイルを指定するとともにそれぞれのファイ ンドの恩恵に与れるのです。 Ⅱ Ⅱ ・ 1 ・ 1 cd cd 1 ″財ん O O O りん sub . C % make CC —C maln . C . 0 sub . 0 CC ー 0 maln maln 130 UNIX MAGAZINE 1992.3
% make CC ー 0 ma11i maln . C : sub . C : . c sub . C 今度は、 main を作成するために必要な main. c ファ イルの最終更新時刻が main ファイルの作成時刻より も新しくなっているので、プログラムの再作成がおこ なわれました。 ごく簡単な make コマンドの実行例をみてきました が、ここで make コマンドの機能をまとめておきましょ う。これまでお話ししてきたように、 make コマンドに は大きく 2 つの機能があります。 1. プログラムの作成に必要な指定された処理を実行す る。 2. ファイルの最終更新時刻を参照し、不要な処理の実 行は避ける。 プログラムの作成に必要な処理は、 Makefile にイン ストラクションとして指定します。 make コマンドは指 定されたインストラクションを実行し、プログラムを 作成するわけです。このとき、関係する各ファイルの 最終更新時刻をファイルシステムに問い合わせ、その 値をもとに本当に処理を実行する必要があるかどうか を判断するのです。処理を実行する必要があるのは、 ・あるファイルを作成するために必要なファイルがそ のファイルよりも新しい ・作成したいファイルが存在しない の 2 つの場合です。 依存関係の指定 さて、さきほどの例を実行したときのことを思い出 してください。 make コマンドを実行して main フロ グラムを作成したときは、 main. c と sub. c の 2 つの ファイルがコンパイルされました。これは main. c とい うファイルを変更し、ふたたび make コマンドを実行 した場合にも同様でした。せつかく必要な処理だけを 実行する make コマンドを使っているのに、無関係な sub. c ファイルをコンパイルするのは無駄だと思いませ UNIX MAGAZINE 1992.3 LJN Ⅸ流プロクラミング 17 んか。 make コマンドを適切に使えは、もちろんこの余 分なコンパイルを実行しないようにできます。 ls コマンドを使ってディレクトリの内容を見てくだ さい。コンノヾイル作業によって main というファイル が作成されていますが、 main. 0 と sub. 0 というファイ ルも作成されています。これらのファイルは cc コマン ドが作成するファイルで、それぞれ main. c ファイル と sub. c ファイルをコンパイルした中間結果か格納さ れています。 cc コマンドはそれぞれのファイルをコン パイルしておき、最後に中間結果のファイルを用いて main というプログラムを作成しているのです。この作 業を別々なインストラクションとして MakefiIe に記述 しておき、 make コマンドに個別に実行してもらえばよ いのです。その場合、 Makefile には main 、 main. c 、 sub. c のほかに main. 0 と sub. 0 も登場します。 例を見たはうが分かりやすいので、中間ファイル ( オ プジェクト・ファイル ) も登場する MakefiIe の例を挙 げておきましよう。 % cat —n Makefi1e 1 2 3 4 5 6 7 8 malli ma111. 0 sub . 0 malll . 0 sub . 0 CC ー 0 ma11i ma111. 0 sub . 0 . C CC —C maln . C sub . C CC —C sub . C 急に難しくなったように思われるかもしれませんが、 順番に見ていけはそれほど手強いものではありません。 1 ~ 2 行目では、 main を作成するためには main. 0 と sub. 。というファイルが必要で、これらのファイルが更 新されているときは "cc ー 0 main main. 0 sub. 。”とい う処理を実行せよと指定しています。同様に 4 ~ 5 行目 では main. 。を main. c から作成する方法を、 7 ~ 8 行 目では sub. 。を sub. c から作成する方法を指定してい ます。 最初の ( ソースファイルだけが存在している ) 状態で は、 1 行目の依存関係に指定されているファイルは 1 つ も存在しません。この場合、 make コマンドは依存する として指定された main. 。や sub. 。を作成しようと試 みます。そこで、 Makefile のなかで main. 0 や sub. 0 を作成するための規則を捜します。前例では各ファイル 129
UN Ⅸへの招待⑩ これに、一 { オプションを加えれば、自分がどのようなフ ゝ ォルダーをもっているかだけが調べられます。 sn00PY test folder には、 -recurse(-r) というオプションがありま す。これは、フォルダーを再帰的に表示するものです。た とえば、フォルダー friend のサプフォルダーも表示する には、以下のようにコマンドを実行します。 % folder -a —f bounen drafts friend % folder —r 十 friend friend + has Ⅱ 0 messages friend/aya has 4 messages friend/mari has 4 messages friend/snoopy has 1 message % folder + friend friend + has 0 messages (others) . 1 ; (others) . イ人イよイよ (others) . folder ー a では、 MH 用のディレクトリ C/Mail) の直 ls -F —C 下にあるフォルダーだけが表示されます。さらに一 r を加え ls —FC れは、その下のサプフォルダーまでがすべて表示されます ( もちろんオプションは組み合わせて指定することが可能 のどちらの形式でオプションを指定しても同し結果が得ら です ) 。 れますが、 MH の場合は、 % folder -a —r % folder —fra この例では、 folders コマンドに -recurse オプションを という指定はできないことになっています。 指定したのと同し結果が得られます。 % folder —f ーて—a この例の表示には、、、やや〃時間がかかります。そこで、 ー { を指定し、 のように、別々に指定しなけれはなりません。なぜなら、 それぞれが正式なオプション名 ()f なら -fast 、 -a なら all) % folder —a ーて -f の省略形にすぎないからです。 と実行すれば、 ( フォルダー名の表示だけになりますが ) 比 folder や folders コマンドには、ここで紹介した以外の 較的早く結果が得られます。なお、 MH 関連コマンドの場 オプションも使えます。ほとんど使わないかもしれません 合、オプションを 1 つの、、一〃の後ろにまとめて指定するこ が、興味があれはマニュアルを覗いてみてください。なお、 とはできません。たとえば、 ls コマンドは、 MH 関連コマンドでは、どのコマンドでも一 help オプショ ンを指定すれば、コマンドの入力形式が表示できます。 % folder -help syntax : folder [ + folder] [msg] [switches] switches are : ー a11 ー [ Ⅱ 0 ] fast ー [ Ⅱ 0 ] header ー [ Ⅱ 0 ] pack ー [no] verbose 157 UNIX MAGAZINE 1992.3
IJN Ⅸへの招待⑩ ント・フォルダーを変更するたびにそれが書き換えられて、ゝてください。さもないと、 folder コマンドでカレント・フ いました。新しい MH を使っていて . mh ー prof Ⅱ e にこの 記述があった場合は、それを削除するかコメントアウトし / ォルダーを変更しようとしても、コマンドが正しく動作し % grep Current ~ /. mh—profile Current—f01der : inbox % folder inbox 十 has % folder + friend/aya friend/aya + has 7 messages ( 4 messages ( ません。 4 ) ; cur= 7 ) ; cur= 7 ; folder : bug : m—replace (key="Current—FoIder" % folder inbox 十 has 7 messages ( でおくのならコメント記号、、 # 〃を使って、 ント・フォルダーが変わっていません。なお、削除しない 上の例では Current-foIder: の記述があったため、カレ "friend/aya") , 7 ) ; cur= 7 ; continuing. (others) . (others) . #Current—f01der : としてください。 inbox folder コマンドの豆知識 ついでですから、知っておくと便利な folder コマンドの オプション、そして folders コマンドについて説明してお きましよう。 、ゝ folder コマンドには、一信 st ( ー f だけでも可 ) というオプ ションがあります。 folder コマンドは通常、 1 ー 70 ) ; cur= 60 ; (others) . inbox + has 70 messages ( という表示をおこないます。これは、フォルダー名 ( カレン ト・フォルダーには、、十〃が付く ) 、保存されているメッセ ージの数、メッセージ番号の何番から何番までが保存され ているか、カレント・メッセージは何か (cur= ) 、その他の ファイルがそのフォルダー・ディレクトリにあるか (others) 、というメッセージです。一方、 -fast( または -f) オプションを指定するとフォルダー名だけが表示されます。 カレント・フォルダーを調べるだけが目的ならば、 -f を 指定したはうが素早く結果を得られます。 folder には、一 a Ⅱ ( ー a だけでも可 ) オプションもありま す。このオプションを指定すると、 MH 用のディレクトリ ( ~ / MaiI) の直下に保存されているすべてのフォルダーに ついての情報が表示されます。つまり、 folders コマンドと 同し結果が得られるわけです。 % folder -f inbox % folder 156 F01der bounen drafts friend SIIOOPY test has has has has has Of 31 2 Ⅱ 0 1 2 messages messages messages message messages messages range ) ; 2 ) . 1 ) ; 2 ) . 31 ) ; cur cur= cur= ms g 1 . 31. TOTAL= 4142 1 Ⅱ 11 folders . (other files) UNIX MAGAZINE 1992.3 (others) .
DZ—X 流プログラミング 入力してもたいした作業ではないでしよう。しかし、複 数の、それもとても多数のソースファイルがある場合、 あるいは一度にコンパイルできないプログラムの場合 はどうでしよう。そのようなとき、毎回入力していた のでは大変です。 csh などのヒストリ機構を利用するの も 1 つの手段ではあります。また、プログラムを作成 するためのシェルスクリプトを作ってもよいでしよう。 プログラムを作成するための一連の手続き コンノヾ イルやリンクをシェルスクリプトにしておけば、これを 実行するだけでプログラムが作成できます。 このようにしておけはソースファイルを変更しても、 いちいちプログラムの再作成のために長いコマンド行 を入力する必要はなくなります。しかし、シェルスク リプトの実行よりもよい方法があります。それが make コマンドの利用です。 make はこのような目的のために作成されたコマンド で、プログラムを作成するときに使用するツールです。 make コマンドに対して適切な設定をおこなっておけ は、プログラムを作成するときに "make ”と入力する だけで必要なコマンドを実行してくれます。 Makefile make コマンドは、実行時にどのようなコマンドを 実行すればよいのかを MakefiIe と呼ばれるファイルか ら読み取ります。言い換えれば、この MakefiIe を使っ て必要な情報をすべて make コマンドに教えるのです。 したがって、 make を使うときにはこの Makefile の書 き方に十分注意しなけれはなりません。 例を挙げて考えてみましよう。作成するプログラム の名前を main とします。そして、このプログラムの ために main. c と sub. c という 2 つのソースファイル があるものとします。この場合、 MakefiIe には次のよ うに記述できます。 main . C sub . C maln CC ー 0 ma111 ma1n . C sub . C 1 Ⅱ ake たった 2 行の MakefiIe ですが、よく見ると make や 皆さんは、プログラムをコンパイルするときにどの Make 用 e に関するさまざまなことが分かります。 1 行 ように実行していますか。コン . パイルのたびに、 "cc -o 目は、ファイル間の依存関係を指定する部分です。、、依 . ”などと入力するのでしようか。プログラムを作る 存関係 " などというと難しく聞こえますが、この行では ためのソースファイルが 1 つだけならは、このように main というファイルは main. c と sub. c というファ 今泉貴史 これまで、プログラムの作成にあたっての注意事項、 あるいはなんらかの目的を達成するためのプログラム の作り方などについてお話ししてきました。今回から しばらくのあいだ、プログラムを作成するときに使う と便利なツールについて説明します。その 1 回目とし て、プログラムのコンパイルなどを自動的に実行して くれる make というツールについてお話しします。 127 UNIX MAGAZINE 1992.3