[Profile] [Emacs] [Software] [Webware] [Home]
[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12. Cygwinのインストール

Cygwin は GCC を含むその名の通りの full.exe と、ユーザの利用するツールだけ が含まれている user.exe があり、それぞれ以下の物を含んでいる。

これらは以下のURLから入手可能である。今月のLibCD Vol.xxには両者を収録して いる。

ftp://sourceware.cygnus.com/pub/cygwin/cygwin-b20/
http://sourceware.cygnus.com/pub/cygwin/

インストールは full.exe を実行するだけでよく、他の Windows アプリケーショ ンと同じような Install Shield を使った自動インストーラとなっている。

★「図2-2 Cygwinのインストール」

本特集では c:/Cygwin へインストールしたものとしてこれ以降の説明を行なので 適宜読み換えて欲しい。インストールが終了すると 図2-3のようなディレクトリ構成となる。

★「図2-3 Cygwinのディレクトリ構成」

<<< 図は ./images/Cygwin_dir.gif, ./images/Cygwin_dir2.gif, ./images/Cygwin_dir3.gifのどれかを使う。>>>

なおアンインストールは、コントロールパネルの「アプリケーションの追加と削除」 から「Cygwin B20」を選択して行なうことができる。

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.1 環境設定

インストールが終了するとスタートメニューに 図2-4に示すように「Cygwin B20」というアイコンが登録される。この実体は `c:/cygnus/cygwin-b20/cygnus.bat' という以下のようなバッチファイルである。

@ECHO OFF
SET MAKE_MODE=UNIX
SET PATH=c:\CYGNUS\CYGWIN~1\H-I586~1\BIN;%PATH%
bash

★「図2-4 スタートメニューからの起動」

これを実行すると 図2-5 に示すような窓が起動する。これは後述する GNU のbash と呼ぶシェルである。 このシェルから様々な Cygwin の GNU の移植されたコマンドが実行できる。

★「図2-5 Cygwin B20の実行(bash)」

しかし、Cygwin 環境をいちいちバッチファイルで起動して、その bash から使う のでは効率が悪いことこの上ない。そこで他のアプリケーション(Meadow等)からも Cygwin 環境が使えるような環境設定を行なおう。

WindowsNT ではコントロールパネルのシステムのプロパティで登録を、Windows9x では autoexec.bat に以下のように追加記述してしまおう。

set PATH=c:\usr\local\bin;c:\CYGNUS\CYGWIN~1\H-I586~1\BIN;%path%
set MAKE_MODE=UNIX
set HOME=c:\kose

GNUの標準実行ファイル格納ディレクトリである /usr/local/bin をパスに追加し、 環境変数HOMEにはホームディレクトリを設定している。ここではpart1と同様に c:\koseとしたので適宜設定して欲しい。

ここで c:\tmp ディレクトリを作成しておく。これは多くのUNIXアプリケーション が一時ファイルを作成する場所として使うためだ。

続いて、c:\bin ディレクトリを作成して、そこにsh.exeをコピーして置く。これ は

#! /bin/sh

で始まるシェルスクリプトがそのまま実行できるようにする ためだ。

お手軽シェルスクリプト実行術

シェルスクリプトのファイル名の拡張子を .sh とし、c:\bin\sh.exe に関連づけ しておこう。そうするとダブルクリックでシェルスクリプトを実行できるようにな る。

これでバッチファイルとおさらばできるというわけである。

ここで get.sh というシェルスクリプトにshの関連付けを行なう。 まだ関連付け前が 図s-1、 それをダブルクリックすると図s-2 のような登録画面になるので、 「その他」ボタンを押し、c:/bin/sh.exeを選択( 図s-3)する。 これでダブルクリックでシェルスクリプトを実行できるようになる。 ついでにアイコンをCygwinのものに変えよう。 図s-1のアイコンの上で右クリックして、 プロパティの変更を行なう。「アイコンの変更」ボタンを押下しアイコンの 変更を行なう。 Cygwinのアイコンは `c:\cygnus\cygwin-b20\share\cygnus.ico' にあるので 図s-4 のように変更できる。 変更後は図s-5となる。

★「図s-1 関連付け前」
★「図s-2 ファイルを開くアプリケーションの選択」
★「図s-3 アプリケーションの選択」
★「図s-4 アイコンの変更」
★「図s-5 アイコン変更後」

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.2 ファイルシステムとマウント

UNIXのファイルシステムはルートディレクトリを基点とした一本の木構造となって いるが、Windowsではドライブを基点とした複数の木構造となっている。異なるド ライブの任意のディレクトリを任意のディレクトリへ仮想的に連結するマウントを Cygwinでも使うことができる。これを使えばUNIXと同じような一本の木構造として 使うことができる。

標準ではCygwinのインストールされたドライブが / にマウントされてる。mountを 引数なしに実行するとマウント状態を確認できる。

> mount
Device           Directory           Type        Flags
c:               /                   native      text!=binary

これを以下に示す手順でバイナリモードでマウントし直そう。umount がマウント 解除のコマンドで、mount に引数 -b を付けることでバイナリモードでのマウント が行なえる。

> umount /
> mount -b c:/ /

バイナリマウントすると以下のようになる。

> mount
Device           Directory           Type        Flags
c:               /                   native      text=binary

これはファイルをテキストモードで開くか、バイナリモードで開くかの違いである。 一般にUNIXでは両者を区別していないため、バイナリファイルをテキストモードで 開いてしまうような、両者を区別せずに書かれたアプリケーションが多い。そのた め期待した動作とはならないケースが多々あるのでバイナリモードでマウントする ことを勧める。

次にCygwinの実行ファイル格納ディレクトリを /bin にマウントする。これはUNIX のアプリケーションが /bin/rm のように絶対パス指定でそこにあることを期待す るものが数多くあるからである。これもバイナリモードでマウントしておく。

> mount
Device           Directory           Type        Flags
c:               /                   native      text=binary
c:\Cygnus\cygwin-b20\H-i586-cygwin32\bin /bin                native      text=binary

ここで試しに 図2-5 のbashから

ls -alF /bin

と入力してみよう。Cygwin環境で使えるたくさんのUNIXコマンドの一覧が表示され るはずである。

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.3 オンラインマニュアル

UNIX 環境ではオンラインマニュアルが読めるということは必須だろう。 ここでは Emacs lisp で書かれていて、 外部コマンドの mannroff の必要ない woman.el を紹介することにする。

Francis J. Wrightさんのページ よりwoman.elを入手し、c:/Meadow/site-lispの下に して置いて、M-x byte-compile-file RET woman.el RET を 実行してバイトコンパイルを行なう。

バイトコンパイルとは

通常のプログラムと同様にEmacs Lispファイルもコンパイルすることができ、これ をバイトコンパイルと呼んでいる。

バイトコンパイルを行なうと、読み込み速度が速く、実行時間を短縮でき、使用す るメモリも少なくなる。 (2)

通常Emacs Lispは .el(Emacs Lisp)という拡張子の付いたファイル名がつけられ、 これをバイトコンパイルすると.elc (Emacs Lisp, Compiled)という拡張子の付い たファイルになる。

Emacsは foo.el と foo.elc というファイルが存在する場合にはバイトコンパイル された foo.elc を読み込むようになっている。もしfoo.el と foo.elcでfoo.elの 方が新らしい場合にはその警告をミニバッファに表示する。

bashやその他のコマンドのオンラインマニュアルは ftp://sourceware.cygnus.com/pub/cygwin/cygwin-b20/full-man.tar.bz2 に含まれている。これは今月のLibCDVol.xxに収録した。 これを以下のように展開する。

cd c:/cygnus/cygwin-b20
bunzip2 full-man.tar.bz2
tar xvf full-man.tar

オリジナルのアーカイヴに収録ミスがあるようで一部のもの (bison.1, gcc.1等)が `c:/cygnus/cygwin-b20/full-man/man' の直下に置かれている。それらは `c:/cygnus/cygwin-b20/full-man/man/man1' に移動しておく。

.emacsには以下のように設定する。前述の full-man の置き場 所も参照できるように woman-manpath に設定している。

;; 自動読み込みの設定
(autoload 'woman "woman"
  "Decode and browse a UN*X man page." t)
(autoload 'woman-find-file "woman"
  "Find, decode and browse a specific UN*X man-page file." t)

;; woman検索パスの設定 (setq woman-manpath (list "c:/usr/local/man" "c:/cygnus/cygwin-b20/full-man/man" ))

使い方は簡単で、Meadow から M-x woman RET manual名 RET だ。 通常の C-x C-f で行なうファイル名入力と同じように ミニバッファ上で SPCTAB で補完することができる。

オンラインマニュアルさえあれば Cygwin の数多いコマンド群ももう恐くはないですね。:-)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.4 シェル

UNIX の最も基本的なシェルは sh である。開発者の名前を取って Bourneシェル(B-sh)と呼ばれている。 一方 GNU の基本シェルは bash(Bourne again shの意)で、 sh に比べて様々な拡張がなされている。

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.4.1 行編集機能とヒストリ機能

bash のキーバインドは Emacs 風である。 Emacs を使える人には馴染みのキーバインドであろう。

C-f 一文字前方移動(→)
C-b 一文字後方移動(←)
C-p ひとつ前のヒストリ表示(↑)
C-n ひとつあとのヒストリ表示(↓)
C-e 行末へ移動
C-a 行頭へ移動
C-d 一文字削除
C-k 行末まで削除
C-y ヤンク

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.4.2 補完

コマンド名やファイル名の補完入力が行えます。

TAB 補完
ESC / ファイル名の補完
ESC ! コマンド名の補完
ESC ? 候補一覧表示

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.4.3 エイリアスの設定とカスタマイズ

bash の設定ファイルは `.bash' という名前でホームディレクトリに置くこ とや、記述書式は UNIX のものとなんら変わることはない。

以下に `.bashrc' のサンプルを示す。

コマンドの別名定義であるエイリアスの設定と、PS1 にてプロンプトの文字の設定 をしている。if で条件分岐しているが、これは環境変数 TERM の値によってエイ リアス定義の切替を行なうサンプルとして示している。これは Meadow のシェルモー ドの時にはカラー表示しないように定義しているものである。

エイリアスの書式は、

alias 別名='実際に実行されるコマンド'

である。例えば ls--color という引数付きで実行すれば、 実行可能ファイルやディレクトリ名は色付きの表示になる。これを毎回毎回 ls --color と入力しなくともこのエイリアス機能を使えば自分の好みで 短縮入力することができるのである。

また、csh ユーザにおなじみのコマンドの存在場所の表示を行なうwhich は Cygwin には含まれていないためbashの組み込みコマンドである type -path で代用するようにエイリアスの設定も便利である。

PS1='kose> '

alias cp='cp -ip' alias lsd='ls -alF | grep "^d"' alias mv='mv -i' alias patch='patch -b --verbose' alias rm='rm -i' alias which='type -path'

if [ "$TERM" = "emacs" ] then alias l='ls -alF' alias ls='ls -F' else alias l='ls -alF --color' alias ls='ls -F --color' fi

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.5 Meadowから使うシェルの設定

part1 では説明を省いたが、Meadow はそれ自体でシェルのターミナル(Windows風 に言うとシェル窓)になるのである。

★「図2-6 Meadowのシェルモード」

Meadow からのシェルの起動方法は「対話的に実行するシェルモード」と「ひとつの コマンドを実行してその実行結果を Meadow のバッファに表示するシェルコマンド」 の二通りある。

ここでMeadowのシェルモードやシェルコマンドで使うシェルの設定を行なう。 `.emacs' には以下のように記述する。

;;; shellの決定
(setq explicit-shell-file-name "bash.exe")
(setq shell-file-name "sh.exe")
(setq shell-command-option "-c")
;; 
(require 'mw32script)
(mw32script-init)

シェルはもちろん Windows の command.com や cmd.com ではなく bash を使うように設定を行なう。

explicit-shell-file-name は対話的に使うシェルモードでのの設定である。 shell-file-name はシェルコマンドの設定である。外部コマンドをこのシェルを経 由して呼出しを行なうので起動の速い sh.exe の方を使うようにしている。

Cygwin B20 に含まれる sh.exeは Linux の Debian ディストリビューションの ash 0.2 であり、configure 等のシェルスクリプトの起動速度、実行速度がbashを 使うよりも速くなっている。

shell-command-option は外部コマンドを呼出すときの引数で、

shell-file-name shell-command-option command
sh              -c                   command

のように呼出しが行なわれる。

mw32script は Meadow 固有の拡張モジュールであり、使用しているシェルに従っ て適宜引数を置き換えたり、1行目に #!/bin/sh と書いてあるスクリプ トファイルならば/bin/sh経由で呼出しを行なって実行するものである。縁の下の 力持ちとも言えるもので使用する人は何も意識せず UNIX と同等の振るまいを行なっ てくれる優れものなのである。

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.6 シェルコマンド

シェルコマンドは、M-! command RET で起動し、実行結果をバッファに表示 する。

これもヒストリ機能が使え、M-! の後に M-pM-n を押下する ことにより、ミニバッファ上でヒストリのひとつ前、ひとつ後を順ぐりに表示する。 RET で選択できる。

コマンド実行のカレントディレクトリはカーソルのあるバッファにある。 M-x pwd RET でカレントディレクトリ表示、 M-x cd RET ディレクトリネーム RET でカレントディレクトリを移動することができる。

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.7 シェルモード

M-x shell RET で起動する対話型シェル (図2-6)である。

以下の設定は `.emacs' にて行なう。シェルモード上で起動するコマンドの 入出力の文字の符号方式(coding-system)を以下のように設定する。この設定でシェ ルモードで実行するコマンドへの入力文字コードをShift JISに、コマンドからの 出力文字コードは自動判定としている。

;; M-x shell (shell mode)のcoding-systemの指定
(add-hook 'shell-mode-hook
          (lambda ()
            (set-buffer-process-coding-system 'undecided-dos 'sjis-unix)))

シェルモードでは TAB で、コマンドやファイル名を補完をすることができ るが、カレントドライブ以外の他のドライブ上のファイル名の補完もできるように するには以下の設定が必要である。

;; shell-modeでの補完 (for drive letter)
(setq shell-file-name-chars "~/A-Za-z0-9_^$!#%&{}`'.,:()-")

bash を使っている場合はそのエイリアスやヒストリ機能が使える。ただし bash の C-p, C-n は Emacs の C-n (next-line)C-p (previous-line) が優先されるのでそれぞれ M-p, M-n を使うよう になっている。

C-c C-a プロンプトの位置に移動
C-c C-n プロンプトのひとつ後に移動
C-c C-p プロンプトのひとつ前に移動
M-p ひとつ前のコマンド表示
M-n ひとつ後のコマンド表示
TAB 補完 (コマンドとファイル名の両方を適宜補完します)

この最低限の動作を知っていると便利であるが、もし使い方を忘れてしまった場合 には C-h m (describe-mode) でそのモードの詳細説明、キーバインドを読 むことができる。

ところで、シェルモードを実行するバッファは複数起動することができる。複数起 動するには M-x rename-uniquely で buffer-name を変えればよい。 *shell*<n> n は2, 3, 4, ... と順番に増えていき、これでいくつでもシェルを 起動し別々に動作さることが可能である。

また、M-x rename-buffer RET 名前 RET で buffer に任意の 名前を付ける事もできる。

*shell wget* のような名前にすると C-x C-b でバッファのリスト表示を 行なった時(図2-7)に何をやっているシェルのバッ ファなのかが一目瞭然で便利である。

★「図2-7 複数のシェルモード」

以上でひと通りの環境の構築は終了である。これ以降ではいろいろなツールのコン パイル方法を示していく。取り上げるツールは Meadow を使って行く上で足りない ものとした。

「足りないものはソースからコンパイルして使う。もし誰も作っていないようなら 作る。」という由緒正しい UNIX 精神に則っているわけなのである。:-)

[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]


# # This document was generated on March, 5 2004 using texi2html 1.61.1


URL: http://www.NetLaputa.ne.jp/~kose/
PGP Fingerprint: 59 8E 1E 4D 41 7F DD 80 12 13 47 A3 FB 62 97 44
Copyright (C) 1999, 2000 kose@yk.NetLaputa.ne.jp All Rights Reserved.
XXXXX