Chapter 1: zshの紹介とインストール方法

1.1: 情報のありか

zsh に関する情報は World Wide Web 経由で入手できる。URL は http://sunsite.auc.dk/zsh/ である。サーバはこの FAQ やその他の多くのものを提供し、現在 Karsten Thygesen とその他の人々によって管理されている(これに関するどんなメッ セージでも zsh@sunsite.auc.dk まで送ってください)。FAQ は http://sunsite.auc.dk/zsh/FAQ/ にある。そのサイトには寄与された zsh スクリプトや関数もあり、我々は喜 んで追加やリンクをする。

このドキュメントは、もとは YODL で書かれており、他の様々なフォーマッ トに簡単に変換可能である。原版のソースファイルは http://sunsite.auc.dk/zsh/FAQ/zshfaq.yo にあり、プレーンテキスト バージョンは、 http://sunsite.auc.dk/zsh/FAQ/zshfaq.txt にある。。

その他の役立つ情報源は、Usenet ニュースグループ comp.unix.questions、 comp.unix.shells、comp.answers に、一般的な UNIX についての質問の 答えと一緒に頻繁に投稿される FAQ 記事集である。7つの記事のうち6番目で は、差異についての簡潔な記述とともに、zsh を含むシェルを扱っている。 また、シェルの違いと変更方法に関する独立した FAQ もある。Usenet FAQ は、FTP 経由で rtfm.mit.edu やミラーサイト、また World Wide Web 上で も入手できる。

アメリカ
http://www.cis.ohio-state.edu/hypertext/faq/usenet/top.html
イギリス
http://www.lib.ox.ac.uk/internet/news/faq/comp.unix.shell.html
オランダ
http://www.cs.uu.nl/wais/html/na-dir/unix-faq/shell/.html

を見てください。本文に send faqs/unix-faq/shell/zsh と書いて、 mail-server@rtfm.mit.edu にメールを送ることで、入手 することもできる。

この FAQ の最新バージョンは、質問 1.6 でリストされているどの zsh アーカイブからでも直接入手できる。

zsh の非常に有益な機能の説明によってマニュアルを補う、より読み易いユー ザガイドも共に置かれている。これは長期的なプロジェクトではあるが、 (ここでは触れられていない)3.1.6 以降で現れるより強力な新しい補完形 式の使い方と、初期化ファイルの書き方のみについて書かれた不完全バージョ ンは、 http://www.pwstephenson.fsnet.co.uk/computing/において様々なフォー マットで入手できる。

(以下のものを Emacs 上で読む方法として、\M-2 \C-x $ とタイプすることでインデントされたテキスト全てを消すことができ、 それから読みたいタイトルの上で \M-0 \C-x $ とする。)

より折衷的な情報については、メーリングリストに連絡をするべきである (質問 5.2 を見なさい)。

1.2: zsh とはなにか

zsh は、Korn シェルに最も似ている標準シェルである UNIX コマンドインタ プリタ(シェル)である。1988 Korn シェルとの互換性は次第に増している。 zsh は、多くの特徴の拡張、特にコマンドラインエディタでの動作をカスタ マイズするためのオプション、ファイル名展開、C シェル(csh)ユーザに馴 染みのある特徴と tcsh(もうひとつのカスタムシェル)から引き出した特別 な特徴を含んでいる。

zsh は、Paul Falstad がプリンストンの学生だったときに書かれたものであ る。しかし、Paul は現在メンテナンスしていないので、質問はメーリングリ ストに送るべきである(質問 5.2 を見 なさい)。zsh は標準のバークレイ形式の著作権のもとで配布されている。

より多くの情報については、ソース配布に含まれている Doc/intro.txt また は Doc/intro.troff ファイルを強く推奨する。機能の一覧表はソースに含 まれている FEATURES にある。

1.3: zsh の長所

ここでは、zsh が特に得意とする事柄について述べる。特にシェルがあ るものをコピーするような機能を、独自の機能だと主張するわけではないが、 コマンドライン編集と展開の分野では zsh は十分に他のシェルに勝っている。 zsh が持っていない、他のフリーなシェルの主要なインタラクティブ機能に ついては(わずかを除いて)触れない。

1.4: zshが動く計算機

zsh は、バージョン 3.0 から GNU autoconf をインストール機構として 使用する。これは古い buildzsh 機構より優れており、柔軟性をかなり 増している。従って、zsh は最新の UNIXや、多くの古い UNIX でもコンパイ ルして実行できるはずである。詳細はソース配布の中の Etc/MACHINES にあ る。

現在、Windows と OS/2 への独自の移植もある。下の `zsh のあり か' を見なさい。

新しいマシンをサポートするための変更が必要な場合、自動で configure するのに必要なプリプロセッサコードを configure.in と config.h.in に 加えることができたなら、context diff をメーリングリストに送ってくださ い。とても感謝されるでしょう(質問 5.2 を見なさい)。まずは最新バージョンを試してみてください。

zsh を使うには、ソース配布を取ってきて( 質問 1.6 を見なさい)、gzip で伸長、 tar で展開して、トップディレクトリの INSTALL ファイルを読みなさい。あ るアーキテクチャでのコンパイルに関する最新情報については、 Etc/MACHINES も読みなさい。

nawk ユーザに対しての注意(次の情報は Zoltan Hidvegi から): 幾つかのシステムでは nawk は壊れていて、 signames.h が間違っているためにシグナルのコードが使えない。これは、 Ultrix、HP-UX、IRIX(?)でよく起こる。このような問題が起きたなら、 gawk をインストールしなさい。

1.5: 最新版の情報

zsh 3.0.8 が最新の正式バージョンである。新しいメジャーバージョン 3.0 は、より信頼性、一貫性、そして(できるだけ)互換性のあ るものにするための大きな内部変更が行われている。zsh をアップグレード する際に、内部変更の設計については、質問 5.1 末尾の非互換性のリストを見なさい。拡張 sh、ksh、POSIX 互換の ため、これは通常よりも長いくなっている。

バージョン 4.0 が安定バージョンとしてリリースされるまでに、3.0 系がさら にリリースされることはないだろう。しかし、3.0.8 に対する幾つかのパッチ は Sourceforge のパッチマネージャ http://sourceforge.net/patch/?group_id=4068 から取得できる。公式パッチは Bart Schaefer (ユーザ名 barts)によって投稿される。

ベータバージョン 3.1.9 も利用できる。zsh の開発は、通常パッチとそ れぞれの一般に利用できる中間バージョンによって行われる。この `開 かれた' 開発システムでは、時にはバグが最新のアーカイブバージョンに 混入してしまうことに注意してください。これらは通常、早急に修正される。 もし本当に最新のものに興味があり、安定した環境について考慮しない場合 は、development サブディレクトリに頻繁にアップロードされ る開発バージョンを試してください。

シェルを変更するのと同様で、古いバージョンとは非互換になるかもし れないことにも注意。部分的なリストについては、 質問 5.1 末尾を見なさい。この種の 変更は、(現在のユーザによる同意により)大抵初期の設計での不都合や不 必要な機能、他の Bourne シェル派生のものとの互換性の向上、(ごく最近 の)POSIX への追従のために強いられる。

1.6: zsh のありか

開発バージョンのメンテナンスは現在私が管理している。管理者が誰であろ うと、 coordinator@zsh.orgというエイリアスで、連絡を取ることが できる。次のリストは(頻繁に最新のものに更新される)ミラーサイトであ る。最初のものは、公式のアーカイブサイトであり、現在オーストラリアに ある。すべて匿名 FTP で利用できる。主要なサイトは、`testing' サブディ レクトリにテストバージョンを置いている。そのような最新情報を取り入れ た開発バージョンは、実際にテストするのを手伝うつもりであるときにだけ 取得するべきである。次のリストは WWW 上の http://www.zsh.org にもある。

ホームサイト
ftp://ftp.zsh.org
http://www.zsh.org/pub/zsh/
オーストラリア
ftp://ftp.ips.gov.au/mirror/zsh/
デンマーク
ftp://sunsite.auc.dk/pub/unix/shells/zsh
フィンランド
ftp://ftp.funet.fi/pub/unix/shells/zsh/
フランス
ftp://ftp.cenatls.cena.dgac.fr/pub/shells/zsh/
ドイツ
ftp://ftp.fu-berlin.de/pub/unix/shells/zsh/
ftp://ftp.uni-trier.de/pub/unix/shell/zsh/
ハンガリー
ftp://ftp.cs.elte.hu/pub/zsh/
(also http://www.cs.elte.hu/pub/zsh/ )
ftp://ftp.kfki.hu/pub/packages/zsh/
イスラエル
ftp://ftp.math.technion.ac.il/mirror/ftp.zsh.org/pub/zsh/
http://www.math.technion.ac.il/mirror/ftp.zsh.org/pub/zsh/
イタリア
ftp://ftp.unina.it/pub/Unix/pkgs/shell/zsh/
日本
ftp://ftp.nisiq.net/pub/shells/zsh/
ftp://ftp.win.ne.jp/pub/shell/zsh/
ノルウェー
ftp://ftp.uit.no/pub/unix/shells/zsh/
ポーランド
ftp://sunsite.icm.edu.pl/pub/unix/shells/zsh/
ルーマニア
ftp://ftp.roedu.net/pub/mirrors/ftp.zsh.org/pub/zsh/
ftp://ftp.kappa.ro/pub/mirrors/ftp.zsh.org/pub/zsh/
スロベニア
ftp://ftp.siol.net/mirrors/zsh/
スウェーデン
ftp://ftp.lysator.liu.se/pub/unix/zsh/
イギリス
ftp://ftp.net.lut.ac.uk/zsh/
(also by FSP at port 21)
ftp://sunsite.org.uk/packages/zsh/
アメリカ
ftp://uiarchive.uiuc.edu/pub/packages/shells/zsh/
ftp://ftp.rge.com/pub/shells/zsh/
ftp://foad.org/pub/zsh/
http://foad.org/zsh/

上で述べた Windows への移植は、 Amol Deshpande <amold@microsoft.com> よって個別にメンテナンスされている。どんな Windows 特有の問題につ いても、直接 Amol にメールしてください。これは非常に新しいため、 完璧を期待しないように。ここから取得することができる。

Windows 3.1 への移植はないが、新しいリリースでは、フリーで利用できる Win32 API 用の UNIX スタイルの環境 Cygwin でコンパイルすることができる。 これについては、http://sourceware.cygnus.com/cygwin で情報を得ることができる。

同様に、OS/2 への移植は、 TAMURA Kent <kent@tril.ibm.co.jp> のページから 入手できる。

1997年10月中旬から始まった、メンテナンス用のメーリングリストに送 られたパッチのアーカイブがある。これらは、すべてシェルに加えられ ていないかもしないし、いくつかはすでに加えられたかもしれないこと に注意してください。単にあなたが持っているバージョンになく、あなたが 欲しいものを探せるだけである。また、アーカイブで前もって必要な ものがあるかもしれない。それは(質問 1.1 で述べられた)zsh WWW ページ上で見つけられる。

http://sunsite.auc.dk/zsh/Patches/

1.7: root になれないが zsh を login shell にできるか

あいにく、多くのマシンでは /etc/shells にそのシェルの名前がない限 り、chsh を使ってシェルを変えることができない。そこ で、もし zsh のコピーを持っているならば、ログインするときにそれを 使うには、いくつかの手先の早業が必要である。(ただ単に zsh と打つのは本当の解決ではない。なぜなら exit した ときに、待機している最初のシェルがまだあるからである。)

基本的なアイデアは、現在のシェルを zsh に置き換えるために exec <zsh-path> を使うことである。多くの場合、 (シェルが sh か ksh なら).profile か(シェルが csh なら) .login のようなログインファイルで、これを行なうことができる。 exec は幾分危険なので、これを試す前に(例えば FTP を通じ て)ファイルを変更する何らかの方法を必ず持つようにしなさい。

もし、ホームディレクトリのサブディレクトリ bin に zsh を持ってい るなら、これを .profile に書きなさい。


    [ -f $HOME/bin/zsh ] && exec $HOME/bin/zsh -l
  
  
または、ログインシェルが csh か tcsh ならば、これを .profile に 書きなさい。

    if ( -f ~/bin/zsh ) exec ~/bin/zsh -l
  
  
(それぞれのケースにおいて、-l は zsh にログインシェ ルであるということを伝える。)

もし実行する前に、この細工をチェックしたいなら、ログインシェルに exec zsh するかどうか尋ねさせることもできる。Bourne ライクなシェ ル用の細工は次の通りである。


    [ -f $HOME/bin/zsh ] && {
            echo "Type Y to run zsh: \c"
            read line
            [ "$line" = Y ] && exec $HOME/bin/zsh -l
    }
  
  
そして C シェルライクなシェル用は、

    if ( -f ~/bin/zsh ) then
            echo -n "Type Y to run zsh: "
            if ( "$<" == Y ) exec ~/bin/zsh -l
    endif
  
  
である。

少なくとも、その csh が使われるマシン上でのテストなしで、これを (-l なしでも).cshrc に書くのは得策ではない。これは、毎回 csh は zsh に変わり、`csh -f' を呼ばない csh スクリプト(不運にも、何人 かはこれを書いてしまう)では失敗する。zsh を実行することを xterm に伝えたいなら、zsh を exec すると同時に環境変数 SHELL を zsh のフルパスに変更しなさい(実際、xterm を使っていなくても、こ のことは一貫性において賢明である)。.cshrc から zsh を exec しな ければならないならば、if ($?prompt) exec zsh で最小 限の安全性チェックができる。

ログインシェルがプロセスリストに -zsh として現れるの を好むなら、zsh-zsh にリンクすると よい(例えば ln -s ~/bin/zsh ~/bin/-zsh)。そして exec を exec -zsh に変更しなさい。(-zsh にパスが通っているかを確認しなさい。)これは、-l オ プションと同じ効果をもたらす。

脚注: もしあなたが、root 権限を持っているなら、NIS クライアントを 含むすべての適切なマシン上で、zsh が /etc/shells に含まれているか を確認しなさい。さもないと、そのマシンへの FTP に問題がでるかもし れない。