説明
csh は、C と類似した構文のコマンド言語インタプリタで、コマンドヒストリバッファーとジョブ制御機能を備えています。
コマンドオプション
各コマンドオプションは次のように解釈されます。
| -c | | 直後の (1 つの) 引き数からコマンドを読み取ります。この引き数は必ずなければなりません。
残りの引き数はすべて argv に格納されます。 |
| -e | | 実行したコマンドが異常終了したり ゼロ以外の exit
ステータスを戻した場合、C シェルは終了します。 |
| -f | | ユーザーのホームディレクトリの .cshrc ファイルの実行を抑止し、シェルの起動を高速化します。 |
| -i | | コンピュータターミナル以外のデバイス (別のコンピュータなど)
からの起動時に、対話形式で csh に応答させます。
通常、 csh は非対話形式で応答します。 csh をコンピュータターミナルから実行すると、 オプションの設定に関係なく、つねに対話形式で応答します。 |
| -n | | コマンドを 実行せず に、コマンドの構文解析のみを行います。
これはシェルスクリプトの構文チェックに有用です。 置換処理 (ヒストリ、コマンド、エイリアスなど)
はすべて実行されます。 |
| -s | | コマンド入力を標準入力から取り込みます。 |
| -t | | 1 行分の入力を読み取って実行します。 |
| -v | | シェル変数 verbose を設定します。これにより、コマンド入力がヒストリ置換の実行後に
標準出力デバイスにエコーされるようになります。 |
| -x | | シェル変数 echo を設定します。
これにより、すべてのコマンドが実行直前に標準エラー出力に エコーされるようになります。 |
| -T | | ファイル名指定支援機能を抑止します。これにより、
ESC キーによるコマンド名とファイル名の完成、 および CTRL-D によるファイルのリストの機能が使用できなくなります
(後述の 『「CSH のユーティリティ」』 の項を参照)。 |
| -V | | .cshrc の実行前に変数 verbose を設定します。これにより、 .cshrc のコマンドもすべて標準出力にエコーされるようになります。 |
| -X | | .cshrc の実行前に変数 echo を設定します。
これにより、 .cshrc のコマンドもすべて標準出力にエコーされるようになります。 |
コマンドオプションの処理後、まだ引き数リストの中に引き数が残っており、しかも -c, -i, -s または -t のいずれのオプションも指定されていない場合、
残っている最初の引き数は、実行するコマンドのファイルの名称であると解釈されます。
コマンド
単純コマンドとは、複数のワードの並びで、 その最初の単語は実行するコマンドを表します。
パイプラインとは、単純コマンドを縦棒 (|)
で区切って並べたものです。 パイプラインの中の各コマンドの出力は、その次のコマンドの入力になります。
複数のパイプラインは、セミコロン (;)
で区切って並べることが可能です。 この形式の場合、各パイプラインは逐次実行されます。
パイプラインの最後の項目の後にアンパサンド (&)
を付けることにより、パイプラインのシーケンスをバックグラウンドモードで実行できます。
パイプラインを小かっこで囲んで単純コマンドとして表し、 別のパイプラインの中の 1 部分にすることができます。
また、2 つのパイプラインを || または && で区切ることにより、C
言語と同様に、 第 1 のパイプラインの実行がそれぞれ異常終了または正常終了したときに限って、
第 2 のパイプラインを実行させることができます。
ジョブ
csh は、各パイプラインを 1 つの ジョブ として扱い、現在実行中のジョブの表
(jobs コマンドでプリント可能) を管理して、各ジョブに小さい整数値を割り当てます。
ジョブが & によって非同期に開始されると、シェルは次のような行をプリントします。
これは、非同期に開始されたジョブがジョブ番号 1 であり、 1 個の
(トップレベル) プロセスを持ち、そのプロセス ID (PID) が 1234 であることを示しています。
ジョブの実行中にほかの作業を行いたくなった場合は、 その時点で定義されている 一時停止 文字 (termio(7) を参照) をタイプして、 現在実行中のジョブに停止シグナルを送ることができます。
通常、ここで シェル はジョブが停止したことを示すメッセージ 'Stopped'
を表示し、 次のコマンドのためのプロンプトを表示します。 これにより、停止したジョブの状態を操作することが可能となるので、このジョブを bg コマンドによってバックグラウンドで実行しておき、
その間にほかのコマンドを実行して必要な作業を終了させてから、 フォアグランドコマンド fg を用いて上記のジョブをまたフォアグランドに戻すことができます。 一時停止 はタイプ後ただちに作用し、割り込み文字と同様に、
未表示の出力や読み取り前の入力はタイプと同時に破棄されます。 このほかに、遅延型の 一時停止 があり、これはプログラムが read(2) を実行してこの文字を読み取ろうとした時点で停止シグナルを発生させます。
あるジョブに対するコマンドをタイプした後でこの遅延型の一時停止をあらかじめタイプしておけば、ジョブがコマンドを読み取った後でジョブを停止させることができます。
バックグラウンドで実行中のジョブは、 ターミナルからの読み取りを実行しようとした時点で停止します。
通常の場合、バックグラウンドジョブは出力を生成できますが、コマンド stty tostop によってこれを抑止することができます
(stty(1) 参照)。 この tty オプションを指定すると、 バックグラウンドジョブは、入力を読み取ろうとした場合と同様に、
出力を生成しようとした場合にも停止します。 各種のキーボードシグナルや、 ターミナルインタフェースからの回線ハングアップシグナルは、
このような設定のシステム上のバックグラウンドジョブには送られません。
したがって、バックグラウンドジョブは、ログアウト操作や、割り込み文字、
クイット文字、一時停止、および遅延型一時停止の影響を受けません (termio(7) 参照)。
シェルの中でジョブを参照する方法はいくつかあります。 文字 % を使用するとジョブ名を指定できます。
ジョブ番号 1 を指定したい場合は、 %1 という形式で指定できます。 ジョブを指定するだけで、そのジョブはフォアグラウンドに移ります。
つまり、 %1 は、ジョブ 1 をフォアグラウンドに戻す fg
%1 と同義です。 同様に %1 & と入力すると、ジョブ 1 はバックグラウンドで再実行されます。
ジョブの指定は、起動時にタイプした文字列の先頭から、 一意にジョブが確定するところまでの部分を用いて行うことも可能です。
たとえば、一時停止しているジョブのうち、名称が %ex で始まるジョブが 1 つだけの場合には、通常、 ex と入力すれば一時停止中の ex(1) のジョブが再開されます。また、 %?string と入力して、 string を含むジョブを指定することもできます (ただし、この文字列を含むジョブが 1 つしか存在しない場合)。
csh には、現在のジョブ、前のジョブという概念があります。
ジョブに関連した出力の中では、 現在のジョブに + というマークが、
前のジョブに - というマークがつきます。 %+ という省略表記は現在のジョブを表し、 %- は前のジョブを表します。 また、現在のジョブを表す指定として %% を使用することもできます。 これは、 ヒストリ 機構
(後述) の構文と類似しています。
csh は、プロセスの状態の変化をただちに認識します。
通常、ジョブがブロックされて続行不可能となると、 シェルがユーザーにその通知を行いますが、
この通知はプロンプトを出す直前になって初めて行われます。 これは、ユーザーの作業の途中で割り込むのを避けるためです。
ただし、シェル変数 notify を設定すると、 csh はバックグラウンドジョブの状態の変化をただちに通知します。
また notify という csh 組み込みコマンドを使用すれば、特定のプロセスだけをマークして
その状態の変化をただちに通知させることもできます。 デフォルトの場合、 notify は現在のプロセスをマークします。 バックグラウンドジョブの開始後、単に notify と入力するとそのジョブがマークされます。
ジョブの停止中にシェルを抜けようとすると、 csh は You have stopped jobs. という警告メッセージを表示します。
どのジョブが停止中かを調べるには、 jobs コマンドを使用します。
このコマンドを入力した場合、またはすぐに再度シェルを抜けようとした場合、 csh はユーザーに 2 度目の警告は行わず、一時停止していたジョブは終了することになります
(exit(2) を参照)。
組み込みコマンド
組み込みコマンドはシェルの内部で実行されます (この場合、子プロセスは生成されません)。
組み込みコマンドをパイプラインの最後以外の構成要素として実行すると、
そのコマンドはサブシェルの中で実行されます。 組み込みコマンドには以下のものがあります。
| alias | | |
| alias name | | |
| alias name wordlist |
| | | 第 1 の形式は、すべてのエイリアスをプリントします。
第 2 の形式は、指定された name のエイリアスをプリントします。 第 3 の形式は、指定された wordlist を name のエイリアスとして登録します。 wordlist に対しては、コマンドとファイル名の置換が行われます。 name には alias と unalias を指定することはできません。 |
| bg [%job ...] | | 現在のジョブ (引き数 job の指定がない場合) または指定されたジョブをバックグラウンドに移します。
一時停止中のジョブの場合には、実行が再開されます。 |
| break | | このコマンドを囲む最も内側の foreach または while ループを閉じている end の後から実行を再開します。
同じ行にある残りのコマンドは実行されます。 したがって、1 行に複数の
break を指定すれば、複数レベルの break を実行できます。 |
| breaksw | | switch 構造の外に抜け出して、 endsw の後から再開します。 |
| case label: | | switch 文の中のラベルです (後述)。 |
| cd | | |
| cd directory_name |
| | | |
| chdir | | |
| chdir directory_name |
| | | シェルの現在のワークディレクトリを、指定された directory_name に変更します。 directory_name はデフォルトでユーザーのホームディレクトリになります。 指定された directory_name が現在のワークディレクトリのサブディレクトリに見つからない場合で、
先頭が /, ./, ../ のディレクトリでもない場合には、
変数 cdpath に指定されているディレクトリに directory_name という名称のサブディレクトリがないかどうかチェックします。
それでも見つからない場合、 csh は directory_name をシェル変数として扱います。 その変数の値が / で始まっている場合には、ディレクトリかどうかチェックされます。 cd(1) も参照してください。 |
| continue | | このコマンドを囲む最も内側の while または foreach ループの実行を先頭から再開します。
同じ行にある残りのコマンドは実行されます。 |
| default: | | switch 文の場合分けのデフォルトの部分を示すラベルです。
このデフォルトの部分は、これ以外の case ラベルより後に指定するものです。 |
| dirs | | ディレクトリスタックをプリントします。 スタックの最上位を左側に表示します。
スタックの最初のディレクトリが現在のディレクトリです。 |
| echo wordlist | | |
| echo -n wordlist | | 指定されたワードをスペースで区切ってシェルの標準出力に書き出します。 -n オプションが指定されている場合を除き、最後は改行で終わります。 echo(1) も参照してください。 |
| else | | |
| end | | |
| endif | | |
| endsw | | 後述の foreach、 if、 switch および while の各文の説明を参照してください。 |
| eval arguments ... |
| | | (sh(1) と同様の動作です)。 arguments をシェルへの入力として読み取り、その結果として生成されたコマンドを実行します。
通常、これは、コマンドの置換や変数の置換の結果として生成されたコマンドを実行するために使用します
(構文解析がこのような置換の前に行われるためです)。 |
| exec command | | 指定したコマンドが現在のシェルの代わりに実行されます。 |
| exit | | |
| exit (expression) |
| | | csh が終了し、 status 変数の値
(第 1 の形式の場合)、 または指定された expression の値 (第 2 の形式の場合) を戻します。 |
| fg [%job ...] | | 現在のジョブ (job の指定がない場合) または指定されたジョブをフォアグラウンドに移します。
一時停止しているジョブは実行が再開されます。 |
| foreach name (wordlist) |
| | | |
| ... | | |
| end | | 変数 name に wordlist の各要素が順次設定され、 このコマンドから対応する end までのコマンドシーケンスがそれぞれの要素について実行されます。
(foreach と end は、それぞれ別個の行に単独で指定する必要があります)。 組み込みコマンドの continue によってループ実行の途中から次のループ実行に移行することが可能で、
また、組み込みコマンドの break を使用すればループ全体を途中で終了できます。
このコマンドがターミナルから読み取られる場合には、 まずループが読み取られた後、ループ内の文を実行する前に、プロンプト ? によって入力が要求されます。 ターミナルからのループをタイプする際に入力を間違えた場合は、
消去文字または行消去文字を適宜使用して修正してください。 |
| glob wordlist | | echo と同様ですが、 \ によるエスケープは認識されず、 出力では各ワードが空の文字によって区切られます。
これは、ワードのリストに対するファイル名展開をシェルを用いて実行するプログラムなどで有用です。 |
| goto word | | word には、 label の形式の文字列に展開されるようなファイル名またはコマンドを指定します。
シェルは可能な限り入力をさかのぼって、 label: の形式の行を、前に空白やタブが付加されている場合も考慮しながら検索します。
実行は、上記の処理によって特定された行の直後から継続されます。 |
| hashstat | | 内部ハッシュテーブルが、コマンドの検索 (および exec の実行回数の削減)
の上でどの程度まで効果的かを示す 1 行の統計をプリントします。 exec は、ハッシュ関数によってヒットする可能性が示された path の各要素と / で始まっていない各要素に対して実行されます。 |
| history [-h]
[-r] [n] |
| | | ヒストリイベントリストを表示します。 n を指定すると、最近の n 個のイベントだけがプリントされます。 -r オプションを指定すると、表示の順序が逆順し、
最近のイベントから前のイベントの順でプリントされます。 -h オプションを指定すると、
先頭の番号なしでヒストリリストがプリントされます。 これを使用して source コマンド用のファイルを生成することができます。 |
| if (expression) command |
| | | 指定された expression の値が真の場合には、単一のコマンド command が引き数付きで実行されます。 command に対する変数の置換は早い段階で実行され、 if コマンドの残りに対する置換の実行と同時です。 command は単純コマンドでなければなりません。 パイプライン、コマンドリスト、小かっこで囲んだコマンドリスト、 エイリアスがあるコマンドは指定できません。 expression の値が偽となって コマンド が実行 されない 場合でも、 入出力のリダイレクトは実行されます
(これはバグです)。 |
| if (expression1) then |
| | | |
| ... | | |
| else if (expression2) then |
| | | |
| ... | | |
| else | | |
| ... | | |
| endif | | expression1 の値が真の場合には最初の else までの全コマンドが実行され、
偽の場合には、 expression2 の値が真であれば 最初の else から 2 番目の else までの全コマンドが実行され、以下同様となります。 else-if は何組みでも指定できますが、 endif は 1 個だけ指定可能で必須です。また、 else の部分は省略可能です。(ワード else と endif は入力行の先頭に指定する必要があります。 if 文は、1 つの入力行に単独で、または else の後に指定する必要があります)。 |
| jobs [-l] | | アクティブなジョブをリストします。 -l オプションを指定すると、通常の情報のほかにプロセス
ID もリストされます。 |
| kill % job | | |
| kill - sig % job ... |
| | | |
| kill pid | | |
| kill - sig pid... |
| | | |
| kill -l | | TERM (終了) シグナルまたは指定されたシグナルを、
指定されたジョブまたはプロセスに送ります。 シグナルは、番号または名称 (/usr/include/signal.h に定義されたシグナル名から先頭の SIG を取り除いた名称、 signal(2) 参照) のいずれでも指定できます。 kill
-l を実行するとシグナル名がリストされます。 このコマンドにデフォルトはないため、 kill だけを指定しても現在のジョブにシグナルは送られません。
送られたシグナルが TERM (終了) または HUP (ハングアップ) の場合
ジョブまたはプロセスには CONT (続行) シグナルも送られます。 kill(1) も参照してください。 |
| limit[-h][resource][maximum_use] |
| | | カレントプロセスおよび作成される各プロセスによる使用量が
(それぞれ) 指定された resource 上で maximum_use を越えないように制限します。 maximum_use が指定されていない場合はカレントリミットが表示され、 resource が指定されていない場合は全制限が与えられます。 -h フラグを指定した場合は、カレントリミットではなくハードリミットが使われます。ハードリミットはカレントリミット値に上限を課します。ハードリミットを引き上げられるのはスーパーユーザーだけですが、ユーザーはリーガルな範囲でカレントリミットを増減させることができます。 制御可能なリソースには、現在次のものがあります。 | addresspace | | プロセスに対するバイト数で表わしたアドレス空間の最大値 | | coredumpsize | | 作成されたコアダンプの最大サイズ | | cputime | | 各プロセスの使用する CPU 秒数の最大値 | | datasize | | プログラムテキストの終点を越えてデータ領域を拡張が許される最大値。 | | descriptors | | 各プロセスに対するオープンファイル数の最大値 | | filesize | | 作成できる最大の単一ファイル | | memoryuse | | プロセスの常駐セットサイズを拡張できる最大値 | | stacksize | | 自動的に拡張されるスタック領域の最大サイズ |
maximum_use 引き数は浮動小数点または整数で指定することができ、次のようなスケール係数を付加します。 k または kilobytes (1024 bytes)、 m または megabytes、 および b または blocks (ulimit システムコールで使われる単位) resource 名とスケール係数には、名前のプレフィックスを混同が起こらないように使用することができます。 filesize は csh のインスタンスによって引き下げることができますが、これを引き上げることができるのは実効ユーザー ID が root のインスタンスだけです。 詳細情報に関しては、 ulimit システムコールのドキュメンテーションを参照してください。 |
| login | | ログインシェルを終了させ、代わりに /usr/bin/login.
を実行します。 これはログオフする方法の 1 つで、 sh(1) との互換用です。 |
| logout | | ログインシェルを終了させます。 ignoreeof が設定されている場合に有用です。 類似した機能のコマンド bye コマンドは標準の
BSD csh の一部ではなく、将来のリリースではサポートされない可能性があるので、
できるだけ使用しないようにしてください。 |
| newgrp | | このコマンドを実行したプロセスのグループ番号を変更します。
詳細については newgrp(1) を参照してください。 newgrp は新しいシェルを実行するため、現在のシェル環境は失われます。 |
| nice | | |
| nice +number | | |
| nice command | | |
| nice +number command |
| | | 第 1 の形式は、このシェルの nice 値 (コマンド実行の優先順位) を 4 (デフォルト) に設定します。
第 2 の形式は、優先順位を指定された number に設定します。 最後の 2 つの形式は、指定された command をそれぞれ 優先順位 4 または number で実行します。 適切な権限を持つユーザーであれば、 nice -number ... のように負の nice 値を指定して優先順位を上げることが可能です。 command は必ずサブシェル内で実行され、 単純 if 文中のコマンドの場合と同じ制約が適用されます。 nice(1) も参照してください。 |
| nohup [command] | | 引き数を指定せずにシェルスクリプトの中で nohup を実行すると、スクリプトの残りの部分でハングアップを無視させることができます。
引き数を指定すると、 command コマンドがハングアップを無視する設定で実行されます。 & の指定によってバックグラウンドで実行された全プロセスは、実質的に、 nohup されたのと同一の状態で実行されています
(「コマンド」の項の下のジョブを参照)。 |
| notify [job ...] | | 現在のジョブ (引き数 job を指定しない場合) または指定したジョブの状態が変化したとき、
ユーザーが実行している操作とは無関係に、ただちにその通知を行うようにシェルを設定します。
通常、この通知はプロンプトの表示前に行われます。 シェル変数 notify を設定しておくと自動的にこの動作設定となります。 |
| onintr [-] [label] |
| | | 割り込み時のシェルの動作を制御します。 引き数なしで onintr を実行すると、シェルの割り込み時の動作がデフォルト (シェルスクリプトの終了またはターミナルコマンド入力レベルへの復帰)
に戻ります。 - を指定すると、すべての割り込みが無視されるようになります。 label を指定すると、 シェルに割り込みが発生したり、子プロセスが割り込みによって終了した際に、シェルは goto label を実行します。 シェルがバックグラウンドで実行中で、割り込みが無視される状態の場合には、 onintr を実行しても何も変化しません。 シェルおよびシェルから実行された全コマンドは、そのまま割り込みを無視し続けます。 |
| popd [+n] | | ディレクトリスタックをポップし、 新たにスタックの最上位となったディレクトリに戻ります。
引き数を指定すると、スタックの n 番目のエントリーが破棄されます。 ディレクトリスタックの各要素は、
0 を初期値として最上位から順に番号付けされています。 popd と同一のコマンド rd は、古いシステムとの互換用です。
これは標準の BSD csh の一部ではなく、将来のリリースではサポートされない可能性があるので、
できるだけ使用しないようにしてください。 |
| pushd [name] [+n] |
| | | 引き数なしで pushd を実行すると、ディレクトリスタックの上位の 2 要素が交換されます。
引き数 name を指定して pushd を実行すると、新しいディレクトリへの移動が (cd を用いて) 実行され、 それまでのワークディレクトリが
(csw と同様に) ディレクトリスタックに プッシュ されます。 数値の引き数を指定すると、ディレクトリスタックの n 番目の要素が最上位に移され、それに伴って他の要素が 1 つ下に順次移動し、
シェルは新しい最上位要素のディレクトリに移動します。 ディレクトリスタックの要素は、
最上位要素から順に 0 を先頭として番号付けされています。 pushd と同一のコマンド gd は、古いシステムとの互換用です。 これは標準の BSD csh の一部ではなく、将来のリリースではサポートされない可能性があるので、
できるだけ使用しないようにしてください。 |
| rehash | | 変数 path に指定されているディレクトリの内容について、 内部ハッシュテーブルを再計算します。
ユーザーがログインしている間に path の中のディレクトリに新しいコマンドが追加された場合に、
このコマンドの実行が必要となります。 このコマンドの実行が必要となるのは、
ユーザーが自分のディレクトリのいずれかにコマンドを追加した場合、
またはシステムプログラマがいずれかのシステムディレクトリの 内容を変更した場合のみです。 |
| repeat count command |
| | | 指定された command を count 回実行します (command には、前述した 1 行の if 文で指定する command の場合と同じ制限が適用されます)。 入出力 のリダイレクトは厳密に 1 回だけ行われます (count が 0 でも同じです)。 |
| set | | |
| set name | | |
| set name=word | | |
| set name[index]=word |
| | | |
| set name=(wordlist) |
| | | 第 1 の形式で set を実行すると、すべてのシェル変数の値が表示されます。
値が 1 個のワードでない変数については、 小かっこで囲んだ形のワードリストとしてプリントされます。
第 2 の形式は、 name の値として空の文字列を設定します。 第 3 の形式は、 name の値として word (1 語) を設定します。 第 4 の形式は、 name の index 番目の要素の値として word を設定します。 この要素はすでに存在してなければなりません。
最後の形式は、 name の値として wordlist に指定されたワードのリストを設定します。 どの形式の場合も、value に対してはコマンドおよびファイル名の展開が行われます。 上記の引き数を繰り返すことにより、1 つの set コマンドの中で複数の値の設定を行うこともできます。
ただし、変数の展開は、値の設定の前にすべての引き数に対して一括して
実行される点に注意してください。 |
| setenv name value |
| | | 環境変数 name の値として value (1 つの文字列) を設定します。 非常に多用される環境変数 USER、 TERM および PATH は、 csh 変数の user、 term および path との間で自動的にインポートおよびエクスポートされるので、
これらの変数に対して setenv を実行する必要はありません |
| shift [variable] | | 引き数を指定せずに実行すると、 argv の各要素が左にシフトされて、 argv[1]
が破棄されます。 argv が設定されていない場合、または argv に割り当てられている文字列が 2 個未満の場合は、エラーになります。 variable を指定すると、この variable に対して上記と同じ操作が shift によって実行されます。 |
| source [-h] name | | csh が name からコマンドを読み取ります。 source コマンドはネストできますが、ネストが深すぎると
シェルがファイル記述子を使い果たしてしまったり、最大のスタックサイズ
(maxssiz(5) を参照) に達してしまう危険があります。 source にエラーが発生すると、どのレベルのエラーでも、
ネストさせた source コマンドすべてが終了します。
通常、 source コマンド実行中の入力はヒストリリストに格納されません。 -h オプションを指定すると、
コマンドを実行せずにヒストリリストに入れることができます。 |
| stop [%job ...] | | バックグラウンドで実行中の現在のジョブ (引き数なしの場合)、
または指定されたジョブを停止させます。 |
| suspend | | 一時停止シグナル を送った場合と同様に csh を停止させます。
通常、 csh は 一時停止シグナル を無視するため、 このコマンドがシェルを一時停止させる唯一の方法です。
ログインシェルからこのコマンドを実行するとエラーメッセージが表示されます。 |
| switch (string) | | |
| case str1: | | |
| ... | | |
| breaksw | | |
| ... | | |
| default: | | |
| ... | | |
| breaksw | | |
| endsw | | 指定された string に対してまずコマンドおよびファイル名の展開を実行した後、各 case ラベル
(str1) と順に比較して一致するかどうか調べます。 case ラベルの形式はパターンマッチング表記法に従いますが、
一致しないパターンのリストを示す大かっこ ([]) の表記はサポートされていません
(regexp(5) 参照)。 default ラベルの前に一致するラベルがない場合には、 default の次から実行されます。
各 case ラベルと default ラベルは行の先頭に指定しなければなりません。
コマンド breaksw に到達すると、 endsw の後に制御が移って実行が続けられます。 このコマンドがない場合には、C
言語と同様に、 case ラベルと default ラベルを通過する形で実行が継続されます。 一致するラベルがなく、デフォルト用のコマンドリストも指定されていない場合、 endsw の後に制御が移って続行されます。 |
| time [command] | | command を指定せずに実行すると、 このシェルとその子プロセスが消費した時間の要約がプリントされます。
引き数を指定すると、その単純コマンド command の実行時間を計測して、その時間に関する要約 time 変数をプリントします。
必要な場合には、コマンドの完了時に別のシェルを生成して時間統計をプリントします。 |
| umask [value] | | ファイル作成マスクとして value を設定します。引き数なしの場合には現在のマスクが表示されます。
マスクは 8 進値で指定します。 一般的なマスク値は、 002 または 022 で、前者は、所有者とグループに全パーミッションを与え、
その他の全ユーザーに読み取りと実行のパーミッションを与えるマスク、
後者は、所有者に全パーミッションを与え、 グループとその他のユーザーには読み取りパーミッションだけを与えるマスクです。 umask(1) も参照してください。 |
| unalias pattern | | 指定された pattern に一致するエイリアスをすべて削除します。 したがって、 unalias * を実行するとすべてのエイリアスが削除されます。 pattern に一致する既存のエイリアスがない場合にもエラーにはなりません。 |
| unhash | | 実行するプログラムの位置の検索を高速化するための内部ハッシュテーブルの使用を抑止します。 |
| unset pattern | | 指定された pattern に名称が一致するすべての変数を削除します。 したがって、 unset * を実行するとすべての変数が削除され、その後の操作に大きな支障が生じます。 pattern に一致する変数がない場合にもエラーにはなりません。 |
| unsetenv pattern | | 指定された pattern に一致するすべての変数が環境から削除されます。 前述の setenv コマンドと printenv(1) を参照してください。 |
| wait | | すべてのバックグラウンドジョブの終了を待ちます。
シェルが対話形式の場合には、この待ち状態を割り込みによって解除できます。
その際、シェルはまだ実行中であることが判明したすべてのジョブの名称とジョブ番号をプリントします。 |
| while (expression) |
| | | |
| ... | | |
| end | | 指定された expression がゼロ以外に評価されている間、 while とそれに対応する end の間のコマンドを実行します。 break と continue を使用すれば、それぞれ途中でループを抜け出したり
次の繰り返しに移ったりすることができます。 (while と end は、それぞれの入力行に単独で指定しなければなりません)。
ターミナルから入力した場合 (つまりスクリプトでない場合) には、 foreach 文の場合と同様に、ループの最初に内容を入力するようプロンプトが出力されます。 |
| %job | | 指定されたジョブをフォアグラウンドに移して実行します。 |
| %job & | | 指定されたジョブをバックグラウンドで続行します。 |
| @ | | |
| @ name=expression |
| | | |
| @ name[index]=expression |
| | | 第 1 の形式は、すべてのシェル変数の値をプリントします。 第 2 の形式は、指定された name に expression の値を設定します。 式の中に <, >, & または | が含まれている場合には、 少なくとも式のこの部分は小かっこで囲む必要があります。
第 3 の形式は、 expression の値を name の index 番目の引き数に代入します。 name と、その index 番目の要素は、いずれもすでに存在していなければなりません。 演算子 *=, += などは C と同様に使用できます。 name と代入演算子の間に空白文字を入れてもかまいません。
しかし、 expression の各要素の間にはスペースが必須です。 スペースがない場合には 1 ワードとして解釈されてしまいます。 特殊なポストフィックス演算子の ++ または -- を指定すると、 name はそれぞれ 1 だけ増分または減分されます (たとえば、 @ i++)
。 |
非組み込みコマンドの実行
実行するコマンドが組み込みコマンドでない場合、 csh は exec(2) によってコマンドを実行しようとします。
シェルがコマンドを捜すディレクトリは、変数 path 中の各ワードによって指定されます (コマンドが / で始まっている場合を除く)。 -c と -t のいずれも指定されていない場合、シェルは、
このようなディレクトリ内のファイル名についてハッシュ値を算出し、
その値を内部のハッシュテーブルに格納します。 これにより、目的のコマンドが存在する可能性のないディレクトリに対しては exec を実行せずに済むようになります。 検索パスに多数のディレクトリが指定されているときには、
この方法でコマンドの検索時間が大幅に短縮されます。このメカニズムが
(unhash によって) オフになっている場合、あるいは -c または -t が指定された場合、あるいは path に指定されているディレクトリのいずれも / で始まっていない場合、 シェルはディレクトリ名と指定されたコマンド名を連結してファイルのパス名を作成し、
それを実行しようとします。
小かっこで囲まれたコマンドは必ずサブシェル内で実行されます。
したがって、
は ホーム ディレクトリをプリントし、実行終了後に現在のディレクトリに戻りますが、
では、コマンド終了後も ホーム ディレクトリに移動したままになります。
コマンドを小かっこで囲む方法は、現在のシェルに影響しない形で chdir を実行するためによく使用されます。
ファイルに実行パーミッションがあるのに実行可能なバイナリファイルでない場合には、別のプロセスとして実行されるインタプリタ用のデータを格納したファイル、つまりスクリプトファイルであると解釈されます。
csh は、まずスクリプトファイルをロードして実行しようとします
(exec(2) 参照)。 スクリプトファイルの先頭の 2 文字が #! であれば、 exec(2) は次にインタプリタのパス名が続くものとみなし、
指定されたインタプリタを別のプロセスとして実行して、 スクリプトファイル全体を読み取ります。
#! interpreter の指定がなく、そのシェルに エイリアス がある場合には、その エイリアス を構成するワードが引き数リストの先頭に挿入され、シェ
ルコマンドが形成されます。 エイリアス の最初のワードは、実行するコマンドの絶対パス名でなければなりません。
これは、 エイリアス の置換を後の段階で実行するという特別な場合で、 ワードは変更されずに引き数リストに挿入されます。
#! interpreter の指定がなく、シェルの エイリアス もない場合、 ファイルの先頭の文字が # であれば、変数 $shell によって指定されたインタプリタが実行されます
(ユーザーが $shell) を再設定していない限り、これは /usr/bin/csh となるのが普通です)。 $shell が設定されていない場合には、 /usr/bin/csh が実行されます。
!# interpreter の指定もシェルのエイリアスもなく、
ファイルの先頭の文字も # でない場合には、 /usr/bin/sh が実行されてスクリプトファイルを解釈します。
ヒストリの置換
ヒストリの置換によって、コマンドを繰り返し実行したり、 前のコマンドから語句を流用して新しいコマンドの一部として使用したり、
前のコマンドの引き数を新しいコマンドで繰り返し使用したり、 前のコマンドのスペルミスやタイプミスを訂正したりすることが可能です。
ヒストリの置換は感嘆符 (!) の位置から開始されます。
置換は入力ストリーム中の任意の位置から開始させることができますが、
ネストすることは できません。 感嘆符の前にバックスラッシュを付ければこの特殊な意味を抑止できます。
また便宜上、感嘆符の後に空白、タブ、改行、等号、左かっこが続いている場合には、
その感嘆符はそのままパーサーに渡されます。 ヒストリの置換が行われた入力行は、
確認のため実行前にターミナルにエコーされます。
ターミナルから入力された 1 語以上のコマンド入力は、 ヒストリリストにセーブされます。
置換が実行されると、このセーブされたコマンドから取り出された一連のワードが入力ストリームの中に再生成されます。
ヒストリリストにセーブされるコマンドの数は、 history 変数によって決まります。
直前のコマンドは、この変数の値に関係なく必ずセーブされます。 コマンドには 1 から順に番号が付けられます。
以前のイベントを参照する方法としては、イベント番号 (たとえば
10 番目のイベントを表す !10)、 相対イベント位置
(たとえば 2 つ前のイベントを表す !-2)、 コマンド名の全体または一部
(たとえば、先頭の文字が d のコマンドを用いた最新のイベントを表す !d)、
または、文字列の式 (たとえば mic という文字を含むイベントを示す !?mic?)
を使用する方法があります。
上記の形式を使用すると、 指定されたイベントで入力された各ワードが、それ以上変更されずに、それぞれ空白 1 個で区切られた形でそのまま再現されます。
特殊な形式としては、再実行のための表記 !! があり、直前のコマンドを表します。
コマンドから特定のワードを選択するには、 イベント指定の後に、コロン
(:) および目的のワードを表す指示子を指定します。
入力行のワードは、0 から順に番号で指定できます。 基本的なワード指示子は次のとおりです。
| 0 | | 最初のワード (つまりコマンド名自体) |
| n | | n 番目のワード |
| ^ | | 最初の引き数 (これは 1 と同じです) |
| $ | | 最後のワード |
| a-b | | a から b までの範囲のワードを表します。特殊な簡略表記として、 -y は 「ワード 0 からワード y」 までを表し、 x- は 「ワード x からワード $ 」の前まで (ワード $ 自体は含まない)
を表します。 |
| * | | 2 番目のワードから最後のワードまで |
| % | | 検索パターンの文字列とともに使用し、直前の一致したワードに置き換えます。 |
コマンド指定とワード指示子を区切るコロンは、 引き数のセレクタが、 ^, $, *, - または % で始まっている場合には、省略可能です。
各ワード指示子の後には一連の修飾子を指定できます (各修飾子の前にはコロンを付けます)。
指定できるのは以下の修飾子です。
| h | | パス名の最初の構成要素だけを使用し、その後の構成要素はすべて除去します。 |
| r | | ファイル名から後続のサフィックス (.xxx) を除去し、ファイル名の基本部分だけを使用します。 |
| e | | ファイル名の基本部分を除去し、最後のサフィックス
(.xxx) だけを使用します。 |
| s /l/r | | 指定されたコマンドの中の値 l を r の値で置き換えます。 |
| t | | パス名の最後のファイル名だけを使用し、 それより前のパス名の構成要素はすべて除去します。 |
| & | | その前の置換を繰り返します。 |
| p | | 置換後の新しいコマンドを実行せずに、単にプリントします。 |
| q | | 置換結果のワードを引用して、それ以上置換されないようにします。 |
| x | | q と同様ですが、空白、タブ、改行の位置で各ワードに区切って引用します。 |
| g | | 他の修飾子の前のプレフィックスとして使用するグローバル
(global) コマンドで、指定された変更をグローバルに実行します。
コマンド中のすべてのワードが、1 ワードについて 1 回ずつ変更されます。
シングルコーテーション (') またはダブルコーテーション
(") で囲まれた文字列は、それぞれ 1 ワードとして扱われます。 |
修飾子の前に g が指定されていない場合は、
最初の置換可能なワードだけに対して置換が行われます。 置換を実行しようとして正常に実行できなかった場合には、
エラーとなります (たとえば、 ヒストリバッファーにコマンドが 10 個しかないときに !11 を実行した場合など)。
置換指定の左側に指定するのは文字列で、 HP-UX のエディターの場合の正規表現ではありません。
デリミタ (区切り文字) としては、スラッシュ (/)
の代わりに任意の文字を使用できます。 文字列 l または r の中でデリミタ文字を使用する場合には、バックスラッシュで引用することができます。右側に & があると、左側のテキストで置き換えられます。 \ は & も引用します。 l が空の文字列の場合には、直前の l の文字列、または、 !?s? 形式の中の文脈認識型の検索文字列 s が使用されます。 文脈認識型の検索で最後の ? が省略可能なのと同様に、
置換指定の最後のデリミタも、直後に改行が続くときには省略可能です。
ヒストリの参照はイベントの指定なしでも可能です (たとえば、 !$)。
この場合、原則として直前のコマンドが参照されます。 ただし、その前に同じ行でヒストリ参照が行われている場合には、
この形式の参照指定によって、前にあるその参照が繰り返されます。 したがって、
は、 ?foo? に一致するコマンドから最初と最後の引き数を取り出します。
入力行の最初の非空白文字がハットマーク (^)
の場合には、ヒストリ参照の特別な省略形として処理されます。 つまり、このハットマークは !:s^ と同一に扱われます。この方法によれば、
前の行のテキストに対する置換を簡単に指定できます。 たとえば、 ^lb^lib で前のコマンドの lib のスペルミスを訂正できます。
ヒストリ置換の指定を後続の文字と区別する必要がある場合には、その部分を中かっこ { } で囲むことができます。
したがって、
の後で、 !{l}a と入力すれば、
を実行できます。 もし、この指定の代わりに !la と入力すると、 la で始まるコマンドが検索されてしまいます。
シングルおよびダブルコートを用いた引用
引用符 (\') (")
を使用して文字列を引用することにより、 それ以降の全部または一部の置換を抑止することができます。
シングルコーテーション で囲まれた文字列に対しては、以後、解釈は実行されません。
ダブルコーテーション で囲まれた文字列は、まだ後述の変数およびコマンド展開の対象となります。
いずれの場合も、置換の結果として生成されるテキストは、 1 つのワード全体またはその一部となります。
ただし、後述する 1 つの特殊な場合に限って (『「コマンドの置換」』 の項を参照)、ダブルコーテーションで囲まれた文字列が複数ワードの
一部分となることがあります。 シングルコーテーションで囲まれた文字列が複数のワードになることはありません。
エイリアスの置換
csh はエイリアスのリストを管理しており、ユーザーからは alias コマンドと unalias コマンドによってこのリストの登録、表示、変更を行うことができます。
コマンド行は、まず走査された後、構文解析されて別個のコマンドに分解され、
各コマンドの最初のワードについて、左から右の順で、 エイリアスの有無がチェックされます。
エイリアスがある場合には、そのコマンドのエイリアスとして定義されているテキストが再度読み取られ、
そのコマンドを前の入力行のように解釈する形で、そのテキストに対してヒストリの置換メカニズムが実行されます。
この結果として生成された一連のワードが、コマンドと引き数リストに置き換わります。
ヒストリリストへの参照がない場合、引き数は変化しません。
したがって、 ls のエイリアスとして ls -l が定義されている場合、コマンド ls /usr は ls -l /usr に変換され、引き数は変化しません。
同様に、 lookup のエイリアスとして grep !^ /etc/passwd が定義されている場合、 lookup bill は grep
bill /etc/passwd に変換されます。
エイリアスが見つかると、入力テキストに対するワード変換が実行され、
その結果として形成された新しい入力行に対して、 さらにエイリアス置換の処理が開始されます。
置換後のテキストの最初のワードが前のテキストの最初のワードと同じ場合には、
それを示すマークを設定してそれ以上のエイリアス処理を抑止し、ループに陥るのを防止しています。
このほかのループは csh によって検出され、エラーとなります。
この機構によって、エイリアスの定義でパーサーのメタ構文が使用可能になります。
たとえば、
alias print \'pr \!* | lp\'
により、 pr(1) を用いて引き数をラインプリンターにプリントするコマンドを作成することができます。
式
組み込みコマンドの一部は、式を引き数として取りますが、 式の中では、C
と同様の演算子を同様の優先順位で使用できます。 式は、 @、 exit、 if および while の各コマンドで使用されます。
以下に、使用できる演算子を優先順位の低いものから順にリストします。
|| && | ^ & == != =~ !~ <= >= < > << >> + - * / % ! ~ ( )
次に、上記の演算子を分類して、優先順位の高い方から順にリストします。
* / %
+ -
<< >>
<= >= < >
== != =~ !~
演算子 ==、 !=、 =~ および !~ は、引き数を文字列として比較します。
これ以外はすべて数値に対する演算です。 演算子 =~ と !~ は != と == に類似していますが、相違点は右辺に pattern *s, ?s および [...])
の形式の指定を含む) を取ることで、この場合には、 この右辺のパターンに左辺のオペランドが一致するかどうかが検査されます。
この演算子の使用により、シェルスクリプト中でパターンマッチングだけのために switch 文を使用する必要が減少します。
0 で始まる文字列は 8 進数と解釈されます。
引き数が空の場合または指定されていない場合は、 0 と見なされます。
式の結果はすべて 10 進数を表す文字列となります。 ここで特に注意が必要なのは、
式の 2 つ以上の要素を 1 つのワードの形で記述することができないという点です。
式を構成する各要素は、パーサーによって解釈される構文要素である -、 &、 |、 <、 >、 (、
および ) に隣接する場合を除き、スペースで区切る必要があります。
また、コマンドの実行を中かっこ ({ })
で囲むことにより、 オペラントの 1 つとして式の中に使用することができます。
さらに、 -l filename の形式で、ファイルについての情報の照会もオペランドに指定できます。
ここで、 l には以下のいずれかを使用できます。
| r | | 読み取りアクセス |
| w | | 書き込みアクセス |
| x | | 実行アクセス |
| e | | ファイルの有無 |
| o | | 所有権 |
| z | | サイズがゼロ |
| f | | 普通のファイル |
| d | | ディレクトリ |
指定された filename に対してはコマンドとファイル名の展開が実行され、
続いて、指定されたファイル属性と実ユーザーとの関連がテストされます。
ファイルが存在しない場合またはアクセスできない場合には、どの照会も偽
(0) を戻します。 コマンドがステータス 0 で終了すると、コマンドの実行は成功し真を戻します。ステータスが 0 でないときは偽を戻します。
さらに詳細なステータス情報が必要な場合は、コマンドを式の外で実行して変数 status を調べる必要があります。
フローの制御
csh には実行制御コマンドが用意されており、
コマンドファイル (シェルスクリプト) の中で、 またターミナル入力から
(限定的ながら有用な方法で) 使用することができます。 これらのコマンドは、いずれもシェルに入力の一部分を再読み取りまたはスキップさせるという方式でその機能を実現しているため、
一部のコマンドについては指定位置に制約が生じています。
foreach、 switch、 while 文、および、 if 文の if-then-else の形式のものでは、その主要キーワードを 1 つの単純コマンドの形で入力行に指定する必要があります
(前述の各コマンドの項を参照)。
シェルの入力がシーク可能でない場合、 シェルはループの読み取りの際に入力をバッファーに格納しておき、
この内部バッファー内でシークを実行してループで必要な再読み取りを実現します。
(この方式で可能な限り、シーク不可能な入力に対しても逆方向の goto が実行できます)。
シグナルの処理
csh は、通常、停止シグナル quit を無視します。 バックグラウンドモードで実行中のジョブは、
ハングアップを含め、キーボードから生成されたシグナルには反応しません。
その他のシグナルの値は、シェルがその親から継承した状態のままです。
シェルスクリプト内での割り込みシグナルと終了シグナルの csh の処理は、 onintr によって制御できます。 ログインシェルは終了シグナル terminate をキャッチします。 ログインシェルでない場合、このシグナルはシェルの親プロセスの状態から子プロセスに渡されます。
ログインシェルがファイル .logout を読み取っているときには、割り込みはすべて抑止されます。
コマンド行の解析
csh は入力行を空白とタブの位置でワードに分割します。
ただし、以下に示した例外 (パーサーのメタキャラクタ) は、つねに別個のワードとして解釈されます。
| & | | アンパサンド |
| | | | 縦棒 |
| ; | | コロン |
| < | | 左向き不等号 |
| > | | 右向き不等号 |
| ( | | 左小かっこ |
| ) | | 右小かっこ |
| && | | 二重アンパサンド |
| || | | 二重の縦棒 |
| << | | 二重の左向き不等号 |
| >> | | 二重の右向き不等号 |
| # | | コメントデリミタ |
バックスラッシュ (\) は、上記のパーサーメタキャラクタから特殊な意味を取り除きます。
前にバックスラッシュが付いたパーサーメタキャラクタは、その ASCII
値で解釈されます。 前にバックスラッシュが付いた改行文字 (ASCII 10)
は空白として扱われます。
引用符 (シングルコーテーションまたはダブルコーテーション)
で囲んだ文字列は、ワードの一部分となります。 この文字列の中にメタキャラクタまたは空白やタブが含まれていても、別個のワードにはなりません。
2 つのバックスラッシュまたは 2 つの引用符の間に、バックスラッシュが前に付いた改行がある場合には、本来の改行文字として扱われます。
csh の入力がターミナル以外の場合には、 # の文字から改行までがコメントとして処理されます。
CSH
の変数
csh は一群の変数を保持し、管理しています。
各変数は、0 個以上の文字列 (ワード) から構成される値を持っています。
変数には名称があり、各変数名は英字で始まる 80 字以内の英数字です。
アンダースコアも英字と見なされます。 set コマンドと unset コマンドを用いて、変数の値の表示と変更ができます。
一部の変数は論理型です。シェルは論理型変数の値は無視し、 設定されているかどうかだけを検査します。
一部の演算は、変数を数値として処理します。 単価記号 (@)
コマンドを使用すれば、数値計算を実行して、 その結果を変数に代入することができます。
空の文字列は 0 と見なされ、複数ワードの値では 2 番目以降のワードは無視されます。
入力行のエイリアス置換と構文解析の終了後、 各コマンドの実行前に、ドル記号
($) で表される変数の展開が行われます。 ドル記号の前にバックスラッ
シュ (\) を付けると変数の展開は抑止されます。
ただし、例外として、ダブルコーテーション (")
内では 必ず 置換が実行されます。
シングルコーテーションで囲まれた変数はまったく展開されません。 シングルコーテーションで囲まれた文字列は後で解釈され (『「コマンドの置換」』 の項を参照)、変数の置換がある場合でもその時点で初めて実行されます。
ドル記号の後に空白、タブ、または行末文字が続く場合、ドル記号は展開されずにそのまま渡されます。
入出力のリダイレクト指定は、変数の展開により前に認識され、
他の部分とは別個に変数展開されます。 これ以外は、コマンド名と引き数リスト全体が一緒に展開されます。
ダブルコーテーションで囲まれている場合と :q 修飾子が指定されている場合を除いて、変数の置換結果に対しては、
その後さらにコマンドとファイル名の置換が実行されます。 ダブルコーテーションで囲まれている場合、変数の値が複数ワードでも、
展開の結果は、変数の値を空白で区切った形で 1 ワードの一部分となります。 :q 修飾子が置換に適用された場合、
変数が複数ワードに展開されると、各ワードは空白で区切られ、 引用されて以後のコマンド置換とファイル名置換が抑止されます。
以下のメタシーケンスを使用することにより、 変数の値をシェルの入力に取り込むことができます。
特に注記した場合を除き、未設定の変数を参照するとエラーになります。
| $variable_name | | |
| ${variable_name} | | このシーケンスは、解釈された時点で、変数 variable_name の値を構成するワードに置き換えられます (各ワードは空白で区切られます)。
中かっこによって variable_name と後続の文字を区切ることができます。 中かっこを指定しないと後続の文字も変数名の一部と見なされます。 variable_name が csh 変数ではない場合でも、環境で設定されていれば、その値が使用されます。 csh 変数でない変数
(Non-csh) は、後述するように変更できません。 |
| $variable_name[selector] |
| | | |
| ${variable_name[selector]} |
| | | この変換指定形式によって、 variable_name の値から一部のワードだけを選択できます。 セレクタは変数置換の対象となり、
1 つの数字、またはダッシュでつないだ 2 つの数字を指定できます。 変数の値の最初のワードは、番号 1 で示されます。
範囲の最初を示す番号を省略すると、 1 と解釈されます。
範囲の最後を示す番号を省略すると、 その変数内のワード数の合計 ($#variable_name) になります。 セレクタにメタキャラクタのアスタリスクを使用すると、全ワードが選択されます。 |
| $#variable_name | | |
| ${#variable_name} |
| | | この形式は、変数内のワード数を表します。 これは、
[selector] オプションを使用する指定形式で便利です。 |
| $0 | | この形式は、コマンド入力が読み取られているファイルの名称に置き換えられます。
ファイル名が不明の場合にはエラーになります。 |
| $number | | |
| ${number} | | この形式は、変数 argv からインデックスで要素を選択する指定 ($argv[number]) と同じです。 |
| $* | | これは、 argv をすべて選択するのと同じです ($argv[*])。 |
上記の置換には、修飾子 :h、 :t、 :r、 :q および :x のほか、 :gh、 :gt、 :gr も適用できます。
コマンド形式の中で中かっこ ({ })
を用いる場合は、 修飾子を中かっこ内に指定する必要があります。 現在のインプリメンテーションでは、 1 つの 展開について 1 つの : 修飾子しか使用できません。
以下の置換指定は、 : 修飾子によって修飾することはできません。
| $?variable_name | | |
| ${?variable_name} |
| | | variable_name が設定されている場合には文字列 1 に、未設定の場合には 0 に置き換えられます。 |
| $?0 | | 現在の入力ファイル名が判明すれば 1 に、不明ならば 0 に置き換えられます。 |
| $$ | | シェル (親シェル) のプロセス番号 (10 進数) に置き換えられます。 |
| $< | | 標準入力から取り出した 1 行に置き換えられ、それ以降の解釈は抑止されます。
これを利用すれば、シェルスクリプトの中でキーボードからの読み取りを実行できます。 |
定義済み変数と環境変数
以下の各変数は、シェルにとって特別な意味を持っています。 このうち autologout、 argv、 cwd、 home、 path、 prompt、 shell および status は、シェルによって必ず設定されます。 cwd と status を除き、上記の変数の設定は、初期化時
(csh の最初の実行時) のみに行われます。 これらの変数は、ユーザーが明示的に変更しない限り不変です。
csh は HP-UX の環境変数 USER をシェル変数の user にコピーし、同様に、環境変数 TERM を term に、
環境変数 HOME を home に、 PATH を path にそれぞれコピーします。 csh 変数が再設定されると、これらの値は必ず csh によって環境に戻されます。
ウィンドウ環境で csh が、ウィンドウの大きさが変更されたことを認識すると、 csh は、新しいウィンドウの大きさに応じて LINES と COLUMNS の環境変数を設定します。
| argv | | この変数には、 csh コマンド文の引き数が設定されます。
位置パラメータは、この変数から取り出した値に置き換えられます。 たとえば、 $1 は $argv[1] に置き換えられます。 |
| cdpath | | この変数は、 chdir コマンドでサブディレクトリを捜すときに検索する代替ディレクトリのリストを表します。 |
| cwd | | この変数には、現在のワークディレクトリの絶対パス名が設定されます。
ユーザーが cd を使用してディレクトリを変更すると、この変数の値も変更されます。 |
| echo | | この変数は、コマンド行オプションの -x によって設定されます。
この変数が設定されている場合には、組み込みコマンドとその引き数が、
実行の前にすべて標準出力デバイスにエコーされます。 組み込みコマンドは、コマンドとファイル名の置換の前にエコーされます。
これは、コマンドの置換とファイル名の置換が、後から選択的に実行されるためです。
非組み込みコマンドでは、エコーの前にすべての展開が行われます。 |
| history | | この変数は、ユーザーのコマンドヒストリバッファーを作成し、
そのサイズを設定するために使用されます。 この変数が未設定の場合には、コマンドの履歴は記録されず、
ヒストリ置換の機能は使用できません。 history に非常に大きい値を設定すると、シェルのメモリーがオーバーフローを起こすことがあります。
10 または 20 程度の値が普通です。 コマンドは、実行の可否に関係なく、すべてコマンドヒストリバッファーの中に記録されます。 |
| home | | この変数にはユーザーのホームディレクトリの絶対パス名が設定されています。
この home 変数は HP-UX 環境から初期化されます。 ティルド
(~) に対するファイル名の展開は、この変数を参照して行われます。 |
| ignoreeof | | この変数が設定されている場合、 csh は入力デバイス
(ターミナル) からの EOF (ファイルの終端) 文字を無視します。 通常、 csh は、ファイルの終端を検出した場合
(コマンド行の先頭文字として CTRL-D が入力された場合)
には終了します。一方、 ignoreeof を設定すると、誤って CTRL-D を入力しても実行中のシェルを終了してしまうことがなくなります。
EOF 入力の無限ループを防止するため、 EOF が 26 回続けて入力されると、 csh は終了します。 |
| mail |