マニュアルページセク ション 1: ユーザーコマンド

印刷ビューの終了

更新: 2014 年 7 月
 
 

csh(1)

名前

csh - C に似た構文を持つシェル・コマンドインタプリタ

形式

csh [-bcefinstvVxX] [argument]...

説明

csh は、C シェルの略で、C 言語に似た構文を持つ コマンドインタプリタです。Bourne シェルにはない多くの便利な 対話型の機能を備えています。たとえば、ファイル名の補完、コマンド別名指定、履歴置換、ジョブ制御、多くの組み込みコマンドなどの機能です。Bourne シェルと同様に、C シェルは変数、コマンド、およびファイル名置換機能を提供します。

初期化と終了

C シェルを起動すると、まず通常ホームディレクトリにある .cshrc が読み取り可能であるか、当該ユーザーがその所有者であるか、または当該ユーザーのグループ ID がそのグループ ID と一致するかチェックし、一致していれば .cshrc ファイルを実行します。もし、C シェルを `−' で始まる名前で起動すると、そのシェルはログインシェルとして実行されます (login(1) を起動するときの動作と同じ)。

シェルがログインシェルであった場合、実行は連続して行われます。 最初に /etc/.login 中のコマンドが実行されます。次に ユーザーのホームディレクトリにある .cshrc ファイルのコマンドが実行されます。その後、シェルはユーザーのホームディレクトリにある .login ファイルのコマンドを実行します。このとき、このファイルにも .cshrc と同様のアクセス権チェックが実施されます。通常 .login ファイルには、端末の種類や環境を指定する コマンドが入っています。(ファイルのインタプリタの説明については、「コマンドの実行」と exec(2) を参照。)

ログインシェルが終了したとき、シェルはユーザーのホームディレクトリにある .logout ファイルのコマンドを実行します。このとき、このファイルにも .cshrc と同様のアクセス権チェックが実施されます。

対話型動作

起動処理が終了すると、C シェルはプロンプト hostname% (特権ユーザーなら hostname#) を表示して、端末からコマンドの読み取りを開始します。以降、シェルは以下の処理を繰り返します。 まず入力コマンドを 1 行読み取り、複数のワードに分解します。次にこれらのワードを履歴に記憶し、構文解析します (下記の「使用法」を参照)。最後に、現在の行にある各コマンドを実行します。

非対話型動作

非対話形式で動作しているとき、シェルは端末からの入力を促すプロンプトを表示しません。非対話形式の C シェルは、コマンド行で引数として与えられたコマンドを実行するか、スクリプトと呼ばれるファイルからコマンドを読み取り、実行します。

オプション

サポートしているオプションは、次のとおりです。

–b

オプションの処理を強制的に中断します。以降のコマンド行引数は、C シェルのオプションとしては解釈されません。これによって、オプションを明確にスクリプトに渡すことができます。このオプションが設定されていなければ、シェルは set-user-ID または set-group-ID スクリプトを実行しません。

–c

最初の引数 (必ず指定する) を実行します。残りの引数は、引数リスト変数 argv に格納され、csh に直接渡されます。

–e

コマンドが異常終了したり、0 以外の終了ステータスを返したとき、処理を終了します。

–f

高速起動。開始時に、.cshrc ファイルおよび .login ファイル (ログインシェルのとき) を読みません。

–i

強制的に対話型にします。標準入力が端末 (文字特殊装置) でなくても、コマンド行入力を促すプロンプトを表示します。

–n

構文解析はしますが、コマンドは実行しません。このオプションは、C シェルスクリプトの構文エラーを チェックするのに使用できます。

–s

標準入力からコマンドを受け取ります。

–t

コマンド行を 1 行読み取って実行します。後続の入力行へコマンド行が継続することを示すには、復帰改行 (NEWLINE) を `\' (バックスラッシュ) でエスケープします。

–v

冗長。定義済み変数 verbose を設定します。コマンド入力のエコーを、履歴置換後 (他の置換の前) かつ実行前に行います。

–V

.cshrc を読み取る前に verbose 変数を設定します。

–x

エコー。echo 変数を設定します。すべての置換後、実行の前にコマンドをエコーします。

–X

.cshrc を読み取る前に echo 変数を設定します。

–c、–i、–s、および –t の各オプションを除き、最初の必須 argument はコマンド名またはスクリプト名とみなされます。そして 0 番目の引数として渡され、後続の引数はそのコマンドまたは スクリプトの引数リストへ追加されます。

使用法

ファイル名の補完

filec 変数を設定することによって、対話型 C シェルは、部分的に入力されたファイル名またはユーザー名を補完することができます。ファイル名を部分的にあいまいに入力して ESC 文字を入力すると、シェルは 作業用ディレクトリから一致するファイルを検索して、残りの文字を埋めます。

ファイル名を部分的に入力して EOF 文字 (通常は CTRL-D) を入力すると、シェルは 一致するすべてのファイル名を一覧表示します。そして、入力された不完全なコマンド行の内容を表示して、再度プロンプトを表示します。

最後のワード (入力値の一部) がチルド (~) で始まる場合、シェルは現在のディレクトリのファイル名ではなく、ユーザー名を補完しようとします。

端末は、ビープ音を鳴らすことによって、エラーまたは複数のファイル名が一致したことを知らせます。この音は、nobeep 変数を設定することによって抑止できます。fignore 変数に特定の接尾辞のリストを設定しておけば、その接尾辞を持つファイルを除外することができます。ただし、その接尾辞を持つファイル名以外に一致するものが見つからなければ、この変数は無視されます。なお EOF 文字によるファイル名のリスト出力には、fignore が示す除外対象ファイル名も含まれます。

字句構造

シェルは、入力行をスペース文字およびタブでワードに分解します。ただし、以下に説明する例外を除きます。&、|、; 、< 、> 、( 、および  ) の各文字は、それぞれ別個のワードを形成します。ただし対で使用すると、1 対で 1 つのワードを形成します。これらのシェルメタキャラクタは、他のワードの一部になることもできます。その場合、`\' (バックスラッシュ) を前に付けると、メタキャラクタの持つ特別な意味を抑制できます。\ の付いた復帰改行文字は、スペース文字と同等です。

さらに、単一引用符 ( ' ) 、二重引用符 ( " ) 、または逆引用符 ( ` ) で囲まれた文字列は、ワードの一部を生成します。このような文字列の中に含まれるスペース文字またはタブを含めた メタキャラクタは、別個のワードを形成しません。逆引用符 ( ` ) または二重引用符 ( " ) の対で囲まれた場合、\ (バックスラッシュ) の付いた復帰改行は 本当の意味での復帰改行文字です。各引用符のその他の機能については、後述の 「変数置換」、「コマンド置換」、「ファイル名置換」 の各項で説明しています。

シェルの入力が端末ではない場合、# 文字は、入力行が最後までコメント行であることを表します。\ が前に付いたり、一対の引用符で囲まれると、その特別な意味は抑制されます。

コマンド行構文解析

単純コマンド (simple command) は、一連のワードで構成されます。最初のワード (リダイレクションの一部ではない) は、実行するコマンドを指定します。1 つの単純コマンド、または、| や |& 文字で区切られた一連の単純コマンド群は、パイプライン (pipeline) を形成します。| を使用すると、直前のコマンドの標準出力が、それに続くコマンドの標準入力に変更 (リダイレクション) されます。| & を使用すると、標準エラー出力および標準出力の両方の出力先が、パイプラインを介してリダイレクションされます。

パイプラインはセミコロン ( ; ) で区切ることができます。この場合、それらは順次実行されます。&& または | | で区切られたパイプラインは、条件に従って実行されます。つまり左側のパイプラインの実行が成功するか失敗するかによって、右側のパイプラインが実行されるかどうかが決まります。

1 つのパイプラインまたはパイプラインの並びを、括弧 `' で囲むことができます。囲まれた全体が単純コマンドとなり、他のパイプラインまたはパイプラインの並びのコンポーネントとなることができます。

パイプラインの並びは、`&' を付けることによって非同期的にもしくは 「バックグラウンドで」実行できます。この場合シェルは、プロンプトの出力をパイプラインの並びが終了するまで待ちません。ただちにジョブ番号 (後述の「ジョブ制御」を参照) と関連するプロセス ID を表示してから プロンプトを表示します。

履歴置換

履歴置換を使用すれば、以前入力したコマンド行のワードを、これから入力するコマンド行で使用できます。これにより、綴りの訂正、複雑なコマンドや引数の繰り返し入力が簡単になります。コマンド行は履歴リストに保存されます。履歴リストのサイズは history 変数によって変更できます。どのような場合でも、最後に入力されたコマンドは必ず保持されます。履歴置換の指定は ! で始まり (histchars 変数により別の文字に変更可能)、コマンド行のどこに現われてもかまいません。ただし履歴置換のネストはできません。! を \ でエスケープすれば、その特別な意味を抑制できます。

履歴置換を含んだ入力行は、展開された後で、他の置換が起こる前またはコマンドが実行される前に、端末上に表示されます。

イベント指示子

イベント指示子は、履歴リスト内の コマンド行エントリを参照するものです。

!

次の文字がスペース文字、タブ、復帰改行、=、または ( でなければ、履歴置換を開始します。

!!

直前のコマンドを指します。他の文字を加えずにこれだけを入力すると、直前のコマンドを繰り返します。

!n

n 番のコマンド行を指します。

!–n

入力中のコマンドから n 個前のコマンドを指します。

!str

str で始まる最新のコマンドを指します。

!?str?

str を含む最新のコマンドを指します。

!?str? additional

str を含む最新のコマンドを指し、その参照コマンドに additional を追加します。

!{command} additional

command で始まる最新のコマンドを指し、その参照コマンドに additional を追加します。

^previous_word^replacement^

文字列 previous_word を文字列 replacement に置き換えて、直前のコマンド行を繰り返します。これは履歴置換と同等です。

!:s/previous_word/replacement/.

以前の特定のコマンドを再実行し、さらに同じような置換を行う場合、たとえば 6 番目のコマンドを再実行するには、次のようにします。

!:6s/previous_word/replacement/.

ワード指示子

A `:' ( コロン ) はイベント指示子とワード指示子とを区切ります。ワード指示子が ^、$、*、−、または % で始まるときは省略できます。直前のコマンドからワードを選択する場合、イベント指示子の 2 番目の ! は省略できます。たとえば、!!:1 と !:1 は、両方とも直前のコマンドの最初のワードを指します。また、!!$ と !$ は、両方とも直前のコマンドの最後のワードを指します。ワード指示子には以下のものがあります。

#

今までに入力したすべてのコマンド行

0

最初に入力したワード (コマンド)

n

n 番目の引数

^

最初の引数。1 と同じ

$

最後の引数

%

最新の ?s による検索で一致したワード

x–y

ワードの範囲。–y は 0–y の省略形

*

すべての引数。イベント中に 1 ワードしか存在しないときは NULL

x*

x–$の省略形

x–

x* と同じであるが、ワード $ を省略

修飾子

オプションのワード指示子の後に、: で始まる修飾子のうちの 1 つを追加できます。

h

パス名の後部分のコンポーネントを除去して、前部分を残します。

r

`.xxx' の形の接尾辞を除去して、ベース名を残します。

e

接尾辞以外はすべて除去して、拡張部分を残します。

s/l/r/

l を r で置き換えます。

t

パス名の前部分のコンポーネントを除去して、後部分を残します。

&

前の置換を繰り返します。

g

各ワード内の最初の一致が発生した箇所を、前述のオプションに接頭辞を付けて変更します ( たとえば g&) 。

p

新しいコマンドを表示するだけで、実行はしません。

q

置換されたワードをクォートして、それ以上の置換をエスケープします。

x

q と同じですが、スペース文字、タブ、復帰改行文字 (NEWLINE) ごとにワードに分割します。

g を先頭に付加しないと、l に一致する最初の文字列だけが変更されます。一致する文字列がなければ、エラーとなります。

置換部分の左側は正規表現ではなく文字列です。/ の箇所には、区切り文字としてどのような文字でも使用できます。区切り文字用の文字はバックスラッシュで囲まれます。右側の & 文字は、左側のテキストで置換されます。& はバックスラッシュでクォートすることができます。l が NULL のとき、直前の文字列における l 、または !? における文脈検索文字列 s を使用します。同様に r の直後に復帰改行がある場合、文脈検索の最右にある ? は省略できます。

イベントが指定されないと、履歴リファレンスは前のコマンドか、(もしあれば) そのコマンド行上での前の履歴リファレンスを参照します。

高速置換

^l^r^

これは履歴置換と同等です。

!:s/l/r/.

別名 (エイリアス)

C シェルが持っている別名のリストは、alias および unalias コマンドを使用してユーザーが作成、表示、および変更できます。シェルは、各コマンドの最初のワードが 既存の別名に一致するかどうかをチェックします。一致すれば、そのワードを別名に置き換えて 再度コマンド処理を実行します。履歴置換のメカニズムは、そのコマンドが 前の入力行であったかのように行うことが可能です。これによって履歴置換は (定義中ではバックスラッシュでエスケープされる) 、別名が使用されているとき、実際のコマンド行引数で置き換えることができます。履歴置換が 1 度も呼ばれていなければ、引数は変更されません。

別名はネストできます。すなわち、別名の定義の中に別の別名を入れてもかまいません。ネストされた別名は履歴置換が実行される前に展開されます。これは次のようなパイプラインに役立ちます。

alias lm 'ls -l \!* | more'

これは呼び出されたときに、ls(1) の出力を more(1) にパイプするものです。

最初のワードを除いて、別名を自分自身の定義内、また定義が参照しているほかのどの別名内にも書いてはいけません。このようなループが見つかると、エラーメッセージが表示されます。

I/O リダイレクション

以下のメタキャラクタは、それに続くワードが、コマンドの標準入力、標準出力、標準エラーのリダイレクション先のファイル名であることを示します。このワードは、コマンドの他の部分とは別個に展開された ファイル名、変数、またはコマンドです。

<

標準入力をリダイレクションします。

< < word

標準入力を word と一致する行まで読み取り、それらの行を一時ファイルに格納します。word がエスケープされるかクォートされていなければ、格納された行に対して、変数およびコマンド置換が行われます。そして、一時ファイルを標準入力としてパイプラインが起動されます。word は変数、ファイル名、およびコマンド置換の対象にはなりません。また、各行はシェルによって置換が実行される前に word と比較されます。

> >! >& >&!

ファイルへの標準出力をリダイレクションします。ファイルが存在しなければ作成します。存在すれば上書きします。このとき、以前の内容は失われます。

変数 noclobber が設定されていれば、既存のファイルを破壊しません。この変数は、! 形式のいずれかが使用されていないかぎり、端末および /dev/null へのリダイレクションも防ぎます。& 形式は、標準出力および標準エラー (診断出力) の両方の出力先を、指定ファイルに変更します。

> > > >& > >! > >&!

標準出力へ追加します。> と似ていますが、上書きするのではなくファイルの最後に追加します。noclobber が設定されていると、! 形式のうちの 1 つを使用しないかぎり、存在しないファイルに対してはエラーになります。& 形式は、標準出力および標準エラーの両方をファイルへ追加します。

変数置換

C シェルには一群の変数が備わっており、それぞれは名前と値の対で構成されています。変数には最大 128 個の文字と数字を含めることができます。先頭は文字にします。下線 (_) は文字と見なされます。変数の値は、空白で区切られた 0 個以上のワードです。シェルが 128 文字以内の変数をサポートしている場合は、変数 SUNW_VARLEN が定義されます。128 文字までの変数名をサポートしていない場合は、以前のバージョンのシェルが使用されており、シェル変数名の長さは最大 20 文字になります。

値を参照するには、変数名の前に `$' を付けます。(以下に述べる) ある種の参照は、値から特定のワードを選択したり、変数に関する別の情報を表示したりするのに使用できます。括弧は、入力行の他の文字から参照を区別するために使用できます。

変数置換は、入力行の解析、別名の展開、入出力先のリダイレクションが行われた後に実行されます例外は、入出力先のリダイレクションの変数参照 (リダイレクション中に置換される) および逆引用符で囲まれた文字列 (「コマンド置換」の項を参照) です。

$ の前に \ を付加すれば、変数の置換を抑制できます。ただし、二重引用符で囲まれた中では常に置換されます。単一引用符に囲まれていれば、変数置換は抑制されます。スペース文字、タブ、または復帰改行が続く場合は、$ はエスケープされます。

変数を生成、表示、および破壊するためには、set または unset コマンドを使用します。いくつかの変数はシェルによって管理または使用されます。たとえば argv 変数には、シェルの引数リストのイメージが入っています。シェルに使用される変数の多くはトグルです。つまり、シェルはその変数の値を知る必要はなく、単にその変数が設定されているか否かを知っているだけです。

数値の値は、数字として ((@) 組み込みコマンドで扱うように) 処理できます。数値処理では、空の値は 0 とみなされます。複数ワードからなる値の 2 番目以降のワードは無視されます。たとえば verbose 変数が何らかの値 (  空の値も含む) に設定されていれば、コマンド入力は端末にエコーされます。

コマンドおよびファイル名の置換は、変数置換の結果生成されたワードに適用されます。ただし、二重引用符で抑制されている場合、noglob が設定されている場合 (ファイル名置換の抑制) 、および :q 修飾子で参照がクォートされている場合を除きます。二重引用符の中では、参照が展開され、クォートされた文字列 (の一部) を形成します。つまり、複数ワードからなる値は、スペース文字を埋め込んだ 1 つの文字列に展開されます。:q 修飾子を参照に使用すると、スペースで区切られたワードに展開され、各ワードにはそれ以降のコマンドまたはファイル名の置換を防ぐために、クォートされます。

後述する例外を除き、設定されていない変数を参照するとエラーになります。

$var
${var}

var が示す変数の値から得られる、スペース文字で区切られたワード群に置き換えられます。var が環境変数の場合、その値が返されます (ただし `:' 修飾子と以下に述べる他の形式は使用できない)。

$var[index]
${var[index]}

var が示す変数の値から、特定のワードだけを選択します。index は 1 つの数字、`−' で区切られた 2 つの数字、またはアスタリスクで、これに対して変数置換が行われます。ワード群には 1 から始まるインデックス値が付けられています。`*' はすべてのワードを選択します。もし ($argv[−2] のように) 範囲の最初の数字を省略すると、デフォルトとして 1 とみなされます。もし ($argv[1−] のように) 範囲の最後の数字を省略すると、デフォルトとして $#var (ワード数) とみなされます。第 2 引数が省略されている (または範囲内の) ときは、範囲が空であってもエラーにはなりません。

$#name
${#name}

変数内のワード数を指定します。

$0

setuid シェルスクリプトを除いては コマンドを読み取っているファイル名に置き換わります。ファイルの名前がわからないときはエラーになります。

$n
${n}

$argv[n] と同等です。

$*

$argv[*] と同等です。

:gh、:gt、および :gr のように、修飾子 :e、:h、:q、:r、:t、および :x が適用できます (「履歴置換」の項を参照) 。中括弧 { } を使用するときは、修飾子は中括弧内に書きます。現在のインプリメントでは、このような修飾子を 1 展開あたり 1 つだけ認めています。

次の参照は、修飾子 : を使って修飾することはできません。

$?var
${?var}

var が設定されていれば文字列 1 に、設定されていなければ文字列 0 に置換します。

$?0

現在の入力ファイル名がわかっているときは文字列 1 に、わかっていなければ文字列 0 に置換します。

$$

(親) シェルのプロセス番号に置換します。

$<

標準入力から得る行の内容に置換し、それ以降は何も解釈しません。キーボードからの入力を C シェルスクリプトで 読み取るときに使用できます。

コマンドおよびファイル名置換

コマンドおよびファイル名置換は、組み込みコマンドの引数に選択的に適用されます。評価されていない表現は、展開されません。非組み込みコマンドについては、コマンド名のファイル名展開と、引数リストのファイル名展開は別々に実行されます。展開は、入出力先のリダイレクションが終わった後、サブシェル内で行われます。

コマンド置換

逆引用符で囲まれた ( ` .  . . ` ) コマンドはサブシェルによって実行されます。その標準出力はスペース文字、タブ、復帰改行の箇所でワードに分解されます。空のワードは捨てられます。この分解されたテキストは、現在のコマンド行上の逆引用符で囲まれた文字列を置き換えます。二重引用符で囲まれると、復帰改行文字の箇所だけでワードに分解され、スペース文字、タブはそのまま保存されます。ただし、最後の復帰改行は無視されます。したがって、コマンド置換がワードの一部を生成することも可能です。

ファイル名置換

*、?、[、または { のうちのいずれかの文字を含むクォートされていないワード、または ~ で始まるワードは、以下のようにアルファベット順に ソートされたファイル名のリストに展開 (グロビングとも呼ばれる) されます。

*

(0 個以上の) どの文字とも一致します。

?

どの単一文字とも一致します。

[. . .]

括弧内の文字リストまたは範囲内のどの単一文字とも一致します。リストは文字列です。範囲とは、ダッシュ (−) で区切られた 2 つの文字を指し、ASCII の順で (ascii(5) を参照) その文字間にあるすべての文字も含みます。

{str, str, . . . }

コンマで区切られたリスト内の各文字列 (またはファイル名マッチングパターン) に展開します。この場合、前述のパターンマッチング表現とは違って、この構造の展開はソートされません。たとえば {b,a} は、`a' `b' ではなく、`b' `a' に展開されます。特別な例として、文字 { および } は、文字列 { } と共に、展開されずに引き渡されます。

~[user]

変数 home の値によって示されるホームディレクトリ、または user のパスワードエントリによって示される user のホームディレクトリを意味します。

*、?、および [.  . .] だけがパターンマッチングを意味します。パターンに一致するファイル名が存在しないときはエラーになります。`.'(ドット文字) は、それがファイル名またはパス名のコンポーネントの最初の文字である場合、明示的に一致しなければなりません。/ (スラッシュ) も同様に明示的に一致させる必要があります。

式と演算子

多くの C シェルの組み込みコマンドは、式を受け入れます。この式の演算子は C の演算子と類似していて、その優先度も C での優先度と同じです。通常これらの式は @、exit、if、set、および while コマンド内に現われ、コマンド実行用のフロー制御の規定に使用します。式のコンポーネントはスペースで区切られます。

式の値が NULL または値がないと 0 とみなされます。式の結果はすべて文字列で、10 進数データも文字列で表現します。

C シェルの演算子を、以下に優先度の高いものから順にグループ分けして示します。

( . . .  )

グループ化

>~

1 の補数

!

論理否定

* / %

乗算、除算、剰余。これらは右結合なので、予想した結果が得られない場合があります。組み合わせは括弧を使って明示的にグループ化してください。

+ –

加算、減算 (これらも右結合)

<< >>

ビット単位の左シフト、右シフト

< > <= >=

より小さい、より大きい、以下、以上

= = != =~ !~

等しい、等しくない、ファイル名置換パターン一致 (下記参照) 、ファイル名置換パターン不一致

&

ビット単位の AND (論理積)

^

ビット単位の XOR (排他論理和)

|

ビット単位の OR (包括論理和)

&&

AND (論理積)

|  |

OR (論理和)

演算子 ==、!=、=~、および !~ は、引数を文字列として比較します。他の演算子は数字を使用します。演算子 =~ および !~ は、それぞれ左側の文字列が 右側のファイル名置換パターンと一致するか否かをチェックします。これを使えば、文字列間のパターンマッチングだけ実行したいとき、switch 文を使用する必要がなくなります。

以下に示すようなファイルに関する照会も可能です。

–r filename

ユーザーが読み取り権を持っていれば真すなわち 1 を、そうでなければ偽すなわち 0 を返します。

–w filename

ユーザーが書き込み権を持っていれば、真です。

–x filename

ユーザーが実行権 (またはディレクトリの検索権) を持っていれば、真です。

–e filename

filename が存在していれば、真です。

–o filename

ユーザーが filename を所有していれば、真です。

–z filename

filename のサイズが 0 のとき、真です。

–f filename

filename がプレーンファイルなら、真です。

–d filename

filename がディレクトリなら、真です。

filename が存在しない、またはアクセスできない場合、すべての照会に対して偽を返します。

コマンドが成功したか否かの照会もできます。

{ command }

command が正常に動作していれば、この式は真すなわち 1 として、そうでなければ偽すなわち 0 として評価されます。注: 逆に、command 自体は正常に動作していれば通常 0 を、問題が発生すれば別の値を返します。ステータスを直接知りたければ、この式ではなく status 変数の値を使用します。

制御フロー

シェルはスクリプト内の制御フロー、および制限付きで端末からの制御フローを規定する 多くのコマンドを持っています。これらのコマンドはシェルに入力を再度読み込ませるか (ループさせる)、ある条件下で入力をスキップさせる (分岐させる) ことによって動作します。

foreach、switch、while、if .  . .then、および else の各組み込みコマンドは、入力行の最初のワードとして記述しなければなりません。

もし、シェルの入力が見つからないのにループが読み込まれているときは、その入力はバッファリングされます。シェルは、ループによって示される再読み込みを実行するために、内部バッファを検索します (この範囲において、逆方向の goto コマンドは、入力が見つからない場合でも成功します)。

コマンドの実行

コマンドが C シェルの組み込みコマンドの場合、シェルはそれを直接実行します。そうでない場合、シェルはその名前で実行可能なファイルを検索します。コマンド名が / を含んでいる場合、シェルはそれをパス名とみなし検索します。コマンド名が / を含んでいない場合、変数 path 内の各ディレクトリ内でコマンドを検索することによって、パス名として扱えるようにします。シェルは、検索を高速にするためにハッシュテーブルを使用して (rehash 組み込みコマンドの説明を参照)、該当するファイルが存在しないディレクトリを除外します。このハッシングは –c または –t オプション、または unhash 組み込みコマンドによって使用不能にできます。

特別な例として、スクリプト名に / が含まれず、ワード shell の別名が存在するときは、それの式をコマンド行に (何も変更を加えずに) 付加します。システムは、この特別な別名の最初のワードを実行します。このワードは、完全なパス名でなければなりません。別名定義中の残りのワードは、入力行のテキストと共に引数として扱われます。

適切な実行権を持つパス名が見つかると、シェルは新しいプロセスをフォークし、execve( ) システムコール (exec(2) を参照) を使用して、そのパス名を引数と共にカーネルに引き渡します。 カーネルは、希望するプログラムで新しいプロセスをオーバレイします。ファイルが実行可能なバイナリ (a.out(4) 形式) なら、カーネルは新しいプロセスを引き継ぎ、実行を開始します。ファイルがテキストファイルで、先頭行が #! で始まる場合、次のワードが、そのスクリプトを解釈するためのシェル (またはコマンド) のパス名とみなされます。先頭行の後続のワードは、そのシェルのオプションとみなされます。カーネルは、引数としてそのスクリプト名を使用し、指定されたシェルを起動 (オーバレイ) します。

前述のいずれの条件にもあてはまらない場合は、カーネルはそのファイルをオーバレイできず、execve( ) コールは失敗します (exec(2) を参照)。C シェルは、以下に述べるように新しいシェルを起動して、そのファイルを実行しようとします。

  • ファイルの先頭文字が # の場合、C シェルを起動

  • それ以外の場合は Bourne シェルを起動

シグナル処理

シェルは通常 QUIT シグナルを無視します。バックグラウンドジョブは、ハングアップ (HUP) などキーボードから生成されたシグナルを感知しません。他のシグナルは C シェルがその環境から引き継いだ値を持っています。シェルのスクリプト内における割り込みおよび終了シグナルの処理は、組み込みコマンド onintr で制御できます。TERM (終了) シグナルは、ログインシェルが受け取るか、あるいは子プロセスへ引き渡されます。ログインシェルが .logout ファイルを読み込んでいる間は、いかなる場合でも割り込みは許されません。

ジョブ制御

シェルは、番号の付いたジョブを各コマンドの並びと関連付けて、バックグラウンドで動作中のコマンド、または TSTP シグナル (通常は CTRL-Z) によって停止したコマンドの動作を追跡します。コマンドまたはコマンドの並び (セミコロンで区切られたリスト) をメタキャラクタ & を使用してバックグラウンドで起動した場合、シェルは角括弧で囲まれたジョブ番号が付いた行、および関連するプロセス番号のリストを表示します。

[1] 1234

現在のジョブリストを見るには、組み込みコマンド jobs を使用します。最後に停止したジョブ (停止したジョブがない場合は、最後にバックグラウンドに投入されたジョブ) を「現在のジョブ」といい、`+' で示します。前のジョブは `–' で示します。現在のジョブが終了したり、フォアグラウンドに移された場合、前のジョブが新たな現在のジョブになります。

ジョブを操作するには、組み込みコマンド bg、fg、kill、stop、および % を使用します

ジョブの参照は `%' で始まります。パーセント記号だけの指定は、現在のジョブを示します。

% %+ %%

現在のジョブ。

%–

前のジョブ。

%j

次のようにしてジョブ j を参照します。`kill –9 %j'。ここで、j はジョブ番号、またはジョブを起動した コマンド行を一意に表す文字列です。たとえば `fg %vi' は、停止した vi ジョブをフォアグラウンドに移します。

%?string

コマンド行が string を含んでいるジョブ

バックグラウンドで動作中のジョブは、端末からの読み取り時に停止します。バックグラウンドジョブは、通常出力を生成しますが、`stty tostop' コマンドを使用して抑制することも可能です。

ステータスレポート

対話型で動作している場合、シェルは各ジョブのステータスを追跡し、ジョブが終了したり停止したりするとレポートを出力します。通常、入力表示を乱さないように、プロンプト出力時にメッセージを表示します。変数 notify が設定されているときは、シェルはステータスの変更を即座に報告します。デフォルトでは、notify コマンドは現在のプロセスをマークします。バックグラウンドのジョブの起動後に notify と入力すれば、そのジョブをマークできます。

コマンド

組み込みコマンドは C シェル内で実行されます。組み込みコマンドが、パイプラインの いずれかのコンポーネント (最後のコンポーネントを除く) として現われると、それはサブシェル内で実行されます。

:

NULL コマンド。このコマンドは解釈されますが、実行はされません。

alias [ name [ def ] ]

別名 name に def を割り当てます。def は一群のワードで、エスケープされた履歴置換のメタシンタックスを含めることができます。name に alias または unalias を使用することはできません。def を省略すると、現在の別名の定義 name が表示されます。name と def の両方を省略すると、すべての別名と定義が表示されます。

bg [ %job . . . ]

バックグラウンドで、現在のジョブ または指定されたジョブを実行します。

break

foreach または while の最も内側のループの end の次から実行を再開します。現在の行の残りのコマンドが実行されます。これによって、複数レベルのブレークを break コマンドのリストとして 1 行にすべて書き込めます。

breaksw

switch からブレークして、endsw の直後から再開します。

case label:

switch 文のラベル。

cd [dir]
chdir [dir ]

シェルの作業用ディレクトリを dir が示すディレクトリに変更します。引数を指定しないと、そのユーザーのホームディレクトリに変更します。dir が現在のディレクトリには見つからない相対パス名の場合、変数 cdpath 内のディレクトリリストを検索します。dir が / で始まる値を持つシェル変数の名前である場合、その変数の値が示すディレクトリに変更します。

continue

while または foreach の最も内側のループの、次の繰り返しから実行します。

default:

switch 文のデフォルトケースにラベルを付けます。デフォルトはすべての case ラベルの後に現れなければなりません。コマンド行の残りのコマンドが、最初に実行されます。

dirs [–l]

ディレクトリスタックを出力します。現在のディレクトリが最も左に現れるように 時間順に出力されます。–l 引数を指定すると、~ を使った省略形ではなく、完全な形式で出力されます。

echo [–n] list

list 内のワードをスペース文字で区切って、シェルの標準出力へ書き出します。オプション –n を指定しないと、出力は復帰改行で終了します。echo が UNIX コマンドのフルパス名なしで呼び出された場合、ユーザーの PATH の構成に関係なく、デフォルトでは csh は、組み込みの echo を実行します (echo(1) を参照)。

eval argument . . .

引数をシェルへの入力として読み取り、それをコマンドとして実行します。通常この指定は、コマンドまたは 変数置換の結果として生成されたコマンドを 実行するために使用します。eval の使用例については、tset(1B) を参照してください。

exec command

現在のシェルの代わりに command を実行します。シェルは終了します。

exit [(expr)]

呼び出し元のシェルまたは シェルスクリプトが終了し、ステータス変数の値、または式 expr で指定された値が返されます。

fg [%job ]

現在のジョブ、または指定された job をフォアグラウンドへ移します。

foreach var (wordlist)
. . .
end

変数 var を、wordlist の各メンバーに連続して設定します。var の値が変わるたびに、foreach と end との間にあるコマンドの並びを実行します。foreach と end は異なる行に、単独で現われなければなりません。

ループの現在の繰り返しを終了するには、組み込みコマンド continue を使用します。またコマンド foreach の実行を終了するには、組み込みコマンド break を使用します。このコマンドが端末から読み取られるときは、ループ内の文が実行される前に、? をプロンプトしてから、ループが読み取られます。

glob wordlist

wordlist 内のファイル名を展開します。エスケープ \ を認識しない点を除いて、echo と同様です。出力のワードは NULL 文字によって区切られます。

goto label

指定する label は、展開されるとラベルを生成する コマンドとファイル名です。シェルは可能なかぎり入力をさかのぼり、 label: という形式の行を探します。 label: の前にはスペース文字またはタブ文字がある可能性もあります。指定された行の次から実行が再開します。while または for 組み込みコマンドと、対応する end との間にあるラベルへジャンプするとエラーになります。

hashstat

path 変数の内部ハッシュテーブルがコマンドの検索 (実行を伴わない) にどの程度有効に働いて いるかを示す統計情報行を出力します。ハッシュ関数がヒットの可能性を示しているパスの各コンポーネントと、`/' で始まらない各コンポーネントについて、実行が試みられます。この統計は cdpath 変数ではなく path 変数だけの有効性を示します。

history [–hr] [n ]

履歴リストを表示します。n を指定すると、n 個の最新のイベントを表示します。

–r

出力を、古い履歴からではなく最近の履歴から順に並べ変えます。

–h

先頭に番号を付加せずに履歴のリストを出力します。これは、source に対する –h オプションを使用して、ソーシングに適したファイルを作成するのに使用します。

if (expr )command

指定された式が真ならば、引数付きの単一の command を実行します。command 上での変数置換を最初に実行し、同時に if コマンドの残りの部分を実行します。command は単純コマンドでなければならず、パイプライン、コマンドリスト、括弧付きコマンドリストは指定できません。なお expr が偽で command が実行されなくても、入出力先のリダイレクションが実行されてしまうので注意してください (これはバグです)。

if (expr) then
   . . .
else if (expr2) then
   . . .
else
   . . .
endif

expr が真ならば、最初の else までのコマンドを実行します。expr2 が真ならば、else if と 2 番目の else の間にあるコマンドを実行します。それ以外の場合は、else と endif の間にあるコマンドを実行します。 else if の組はいくつでもかまいませんが else は 1 つしか許されません。endif は 1 つだけ必要で、これは必須です。else および endif というワードは、各行における空白を除く最初の文字でなければなりません。if は、その行に単独で現われるか、else の後に現われるかのいずれかです。

jobs [–l]

ジョブ制御下で活動中のジョブをリストします。

–l

通常の情報の他に、プロセス ID を表示します。

kill [sig ] [ pid ] [ %job ] . . .
kill –l

TERM (終了) シグナル (デフォルトの場合) または指定されたシグナルを、指定されたプロセス ID、指定されたジョブ、または現在のジョブへ送信します。シグナルは番号または名前で指定します。シグナルを送るプロセスまたはジョブにデフォルトはありません。そのため、kill だけを入力しても現在のジョブにはシグナルを送信しません。送信中のシグナルが TERM (終了) または HUP (ハングアップ) の場合、そのジョブまたはプロセスには CONT (継続) シグナルも送られます。

–l

送信可能なシグナル名の一覧を表示します。

limit [–h] [resource [max-use ] ]

現在のプロセス、またはそれが生成したすべてのプロセスについて、各プロセスが指定された resource を max-use 以上消費しないよう制限します。文字列 unlimited は、現在の制限値 (ある場合) の削除を要求します。max-use を省略すると、現在の制限値を表示します。resource を省略すると、すべての制限値を表示します。システムで利用可能な最大制限値を 調べるには sysdef(1M) コマンドを実行してください。sysdef により報告される値は 16 進数ですが、bc(1) コマンドを使って 10 進数に変換できます。

–h

現在の制限値ではなく強い制限値を使用します。強い制限値は現在の制限値を制限します。強い制限値を上げることができるのは特権ユーザーだけです。

resource として指定できるものは次のとおりです。

cputime

プロセス当たりの最大 CPU 使用時間 (秒)

filesize

最大の単一ファイル容量。ファイルシステムのサイズと機能により制限されます。df(1M) を参照してください。

datasize (ヒープサイズ)

プロセスの (スタックも含めた) 最大データサイズ。システムの仮想記憶サイズ。swap(1M) を参照。

stacksize

プロセスの最大スタックサイズ。デフォルトのスタックサイズは 264 バイトです。limit(1) を使用して、シェルのデフォルトのスタックサイズを変更できます。

coredumpsize

最大コアダンプのファイルサイズ。ファイルシステムのサイズに制限します。

descriptors

ファイル記述子の最大数。sysdef(1M) を実行します。

memorysize

仮想記憶の最大サイズ

max-use は数値で、以下の単位を付加して指定することもできます。

nh

(cputime の) 時間

nk

n キロバイト。これは cputime を除くすべての値のデフォルト単位です。

nm

nメガバイトまたは (cputime の) 分

mm:ss

(cputime の) 分と秒

たとえば、 0 メガバイトに コアファイルダンプのサイズを 制限するには次のように入力します。

limit coredumpsize 0M
login [username | –p ]

ログインシェルを終了して login(1) を起動します。.logout ファイルは処理しません。username を省略すると、login がユーザー名をプロンプトしてきます。

–p

現在の環境変数を保存します。

logout

ログインシェルを終了します。

nice [+n  |–n ] [command ]

シェルまたは command のプロセス優先度の値を n だけ増減させます。優先度の値が大きいほど、プロセスの優先度は低くなり、実行速度は遅くなります。command を指定すると、そのコマンドは常にサブシェルで実行され、指定された値は 1 つの if コマンドの範囲内でのみ有効です。command を省略すると、nice は現在のシェルの値を増やします。増やす値を省略すると、nice はプロセス優先度の値を 4 に設定します。プロセス優先度の値の範囲は、−20 から 20 までです。n の値がこの範囲外の場合、最低値または最高値に設定されます。

+n

プロセス優先度の値を n だけ増やします。

–n

n だけ減らします。この引数は特権ユーザーだけが使用できます。

nohup [command ]

HUP を無視して command を実行します。command 引数を省略すると、その後のスクリプト全体において HUP を無視します。command を指定すると、そのコマンドは常にサブシェル内で実行されます。このとき、単純な if 文中のコマンドに対する制限事項が適用されます。& を使って切り離したすべてのプロセスに対し、このコマンドが有効になります。

notify [%job] . . .

現在のジョブまたは指定されたジョブのステータスが変わったとき、非同期的にユーザーに知らせます。

onintr [ – | label]

割り込み時のシェルの動作を制御します。引数を指定しないと、onintr はデフォルトの動作を復元します (すなわち、シェルはシェルスクリプトを終了して、端末のコマンド入力レベルに戻ります)。– 引数を指定すると、シェルはすべての割り込みを無視します。label 引数を指定すると、割り込みを受信するか割り込みのために子プロセスが終了したときに、シェルは goto label を実行します。

popd [+n ]

ディレクトリスタックをポップして、新しいトップディレクトリへ cd します。ディレクトリスタックの構成要素は、トップディレクトリを 0 として番号付けられます。

+n

スタック内の n 番目のエントリを破棄します。

pushd [+n |dir]

ディレクトリスタックにディレクトリをプッシュします。引数を指定しないと、トップの 2 つの構成要素を交換します。

+n

n 番目のエントリとトップスタックを交換しそれに cd します。

dir

現在の作業用ディレクトリをスタックにプッシュし、dir を新たな作業用ディレクトリとします。

rehash

新しく追加されたコマンドに合わせて、path 変数内にリストされたディレクトリの内容の 内部ハッシュテーブルを再計算します。新しく追加されたディレクトリに合わせて、cdpath 変数内にリストされたディレクトリの内容の 内部ハッシュテーブルを再計算します。

repeat count command

command を count 回繰り返します。command は 1 行の if 文と同様の制限に従います。

set [var [= value ] ]
set var[n] = word

引数を設定しないと set はすべてのシェル変数の値を表示します。複数ワードからなる値は括弧でくくられて表示されます。引数 var のみを設定すると、set は空の (NULL) 値を var が示す変数に割り当てます。引数を var = value の形式で設定すると、set は var が示す変数に value が示す値を割り当てます。value は次のいずれかです。

word

単一ワード (もしくは引用符付きの文字列)

(wordlist)

スペースで区切られた、括弧付きワードの並び

値は、割り当てられる前に、コマンドおよびファイル名展開されます。set var[n] = word 形式は、複数ワードからなる値の n 番目のワードを word に置き換えます。

setenv [VAR [word ] ]

引数を設定しないと setenv はすべての環境変数を表示します。引数 VAR を指定すると、setenv は環境変数 VAR に空の値 (NULL) を設定します。 (慣習上、環境変数名は大文字で指定されるのが通常)。VAR と word の両引数を指定すると、setenv は、環境変数 NAME に単一ワードまたはクォートされた文字列である値 word を設定します。最もよく使用される環境変数 USER、TERM、PATH は、自動的に csh 変数 user、term、pathから (へ) インポート (エクスポート) されます。したがって、これらの変数に setenv を使用する必要はありません。さらにシェルは、csh 変数 cwd が変更されるたびに、その値を環境変数 PWD へ設定します。

環境変数 LC_CTYPE、LC_MESSAGES、LC_TIME、LC_COLLATE、LC_NUMERIC、LC_MONETARY は、C シェル内で変更されると新しい値が即座に有効になります。

LC_* 変数 (LC_CTYPE、LC_MESSAGES、LC_TIME、LC_COLLATE、LC_NUMERIC、LC_MONETARY) のいずれも環境に設定されていなければ (environ(5) を参照)、それぞれ対応するロケールのカテゴリにおける csh の動作は、環境変数 LANG の値によって決定されます。 LC_ALL が設定されていれば、その内容が LANG 変数やその他の LC_* 変数より優先されます。上記の変数が環境にまったく設定されていなければ、C ロケール (米国スタイル) が csh の動作を決定します。

LC_CTYPE

csh の文字の処理方法を決定します。LC_CTYPE に有効な値が設定されていると、csh は、そのロケールにあった文字を含む テキストやファイル名を表示および処理できます。

LC_MESSAGES

診断メッセージや情報メッセージの表示方法を決定します。また、メッセージの言語とスタイル、そして肯定応答および否定応答の正しい形も決定します。C ロケールでは、メッセージはプログラム自身が使用しているデフォルトの形 (通常、米語) で表示されます。

LC_NUMERIC

基数文字、小数点 (C ロケールでは (.))、および 3 桁ごとのセパレータ、空文字列 (C ロケールでは ("")) の値を決定します。

shift [variable ]

argv のコンポーネント (または variable が指定されればその変数のコンポーネント) を、 左へずらして最初のコンポーネントを切り捨てます。未設定の変数および NULL 値に対してはエラーとなります。

source [–h] name

name からコマンドを読み取ります。source コマンドはネストできますが、あまり深くネストするとシェルのファイル記述子が不足する可能性があります。ソースファイル中のエラーは、それがいかなるレベルであろうと、 入れ子にされたすべての source コマンドを終了させます。

–h

name が示す、履歴のリスト上のファイル からコマンドを持ってきますが、実行はしません。

stop %jobid . . .

現在のジョブまたは 指定されたバックグラウンドジョブを停止します。

stop pid . . .

指定された pid (プロセス ID 番号) の実行を停止します (ps(1) を参照)。

suspend

^Z を使用して停止シグナルが送信されたときと同様に、トラック内でシェルを停止します。このコマンドは、su コマンドによって開始されたシェルを停止するときによく使用します。

switch (string)
case label:
   . . .
breaksw
   . . .
default:
   . . .
breaksw
endsw

各 label を、指定された string (初めにコマンドおよびファイル名展開される) とマッチングします。ファイルメタキャラクタ *、?、および [.  . . ] は、case ラベルとして使用できます。このラベルは変数展開されます。一致するラベルが見つかる前にデフォルトラベルを検出すると、そのデフォルトのラベルの次から実行が開始されます。各 case 文および default 文は、行の先頭になければなりません。コマンド breaksw は endsw の次から実行を続けます。それ以外の場合、C の場合と同様に、後続の case および default 文に制御が移ります。一致するラベルがなくデフォルトもない場合、endsw の次から実行が続行されます。

time [command ]

引数を省略すると、現在の C シェルとその子プロセスが 消費した時間についての情報を出力します。command を指定すると、command を実行し、その実行時間の情報を出力します。現在 time 組み込みコマンドは出力の最後 6 フィールドに対する値を計算しません。これらのフィールドに 0 の値を表示します。

example %time ls –R 
        9.0u 11.0s 3:32 10% 0+0k 0+0io 0pf+0w

(time 変数については、下の「環境変数と定義済みシェル変数」を参照)。

umask [value ]

ファイル生成マスクを表示します。value を指定すると、ファイル生成マスクが設定されます。value は 8 進数で指定され、どんなビットもオフにできますが、新たにアクセス権を追加するようなビット をオンにできません。よく使われる値として 077 、002 、または 022 があります。077 は、自分以外の誰に対しても何のアクセス権も 与えません。002 は、グループユーザーに対しては全アクセス権、グループ外ユーザーに対しては読み取り (およびディレクトリ検索) 権を与えます。022 は、グループおよびグループ外ユーザーに対して読み取り (およびディレクトリ検索) 権を与えますが、書き込み権を与えません。

unalias pattern

pattern が示すファイル名置換パターン に一致する別名を破棄します。`unalias *' と指定すると、すべての別名が破棄されます。

unhash

path と cdpath 変数の内部ハッシュテーブルを使用不能にします。

unlimit [–h] [resource ]

resource に関する制限を削除します。resource が指定されないと、すべてのリソースの制限値が削除されます。リソース名の一覧については、前述の limit コマンドの説明を参照してください。

–h

対応する強い制限値を削除します。これは特権ユーザーだけしか実行できません。

unset pattern

pattern が示すファイル名置換パターンに一致する名の変数を削除します。`unset *' と指定すると、すべての変数が削除されます。ただしこれによって、たいへんな副作用を引き起こします。

unsetenv variable

環境から variable が示す変数を削除します。unset のようなパターンマッチングは行いません。

wait

プロンプトする前に、バックグラウンドジョブの終了 (または割り込み) を待ちます。

while (expr)
   . . .
end

expr が真 (0 以外) であるかぎり、while と、対応する end 文の間のコマンドを繰り返します。ループを途中で終了させるには break を、または先頭から再開するには continue を使用します。while と end は入力行に単独で現われなければなりません。シェルの入力が端末の場合、疑問符のプロンプトを表示してコマンドを受け付け、end コマンドが入力されると ループ内でコマンドを実行します。

% [job ] [&]

現在のジョブまたは job で指定されたジョブをフォアグラウンドへ移します。アンパサンドを付加すると、ジョブをバックグラウンドで実行し続けます。

@ [var =expr]
@ [var[n]=expr]

引数を指定しないと、すべてのシェル変数の値を表示します。引数を指定すると、var が示す変数の値、またはその値の n 番目のワードを、expr が示す式の評価値に設定します。[n] を指定するときは、var が示す変数およびその n 番目のコンポーネントが既に存在していなければなりません。

式が文字 >、<、&、または | を含んでいる場合、少なくともその部分は括弧で囲む必要があります。

演算子 *=、+= などは C と同様に使用できます。名前と代入演算子とを区切っている空白は、オプションです。ただし、指定しないと 1 ワードとみなされる式のコンポーネントを区切る場合は、スペースは必須です。

特別な接尾演算子の + + と − − は、name をそれぞれ増加・減少させます。

環境変数と定義済みシェル変数

C シェルは、起動したプロセスに自動的に値がエクスポートされる環境変数と、そうでないシェル変数を区別します。この点は Bourne シェルとは異なります。両タイプの変数とも変数置換においては同等に扱われます。初期化の際、シェルは、変数 argv、cwd、home、path、 prompt、shell、および status を設定します。シェルは、環境変数 USER、TERM、HOMEをそれぞれシェル変数 user、term、home へコピーします。そして、前述のシェル変数が再設定されるたびに、対応する環境変数へその値を書き戻します。PATH と path は同様に扱われます。path は .cshrc または .login ファイル内で 1 度設定するだけです。環境変数 PWD は、cwd が変更されるたびに設定されます。以下のシェル変数の意味は (事前に) 以下の通り定義済みです。

argv

引数リスト。シェルの今回の呼び出しの際に渡された コマンド行引数リストを含んでいます。この変数は、$1 や $2 などの定位置パラメータの値を決定します。

cdpath

cd、chdir、および popd コマンドが検索するディレクトリのリスト。これらのコマンドが受け取ったディレクトリ引数が 現在のディレクトリのサブディレクトリでないとき、この変数が示すディレクトリ群が検索されます。

cwd

現在のディレクトリの完全なパス名

echo

実行前に置換後のコマンドをエコーします。

fignore

ファイル名を補完させるときに無視する ファイル名接尾辞のリスト。典型的な例は `.o' の 1 ワードだけ。

filec

ファイル名補完を可能にします。その際、CTRL-d 文字の EOT および ESC 文字が端末の入力行の最後に入力されると特別な意味を持ちます。

EOT

前に指定した文字列で始まる ファイル名のリストをすべて出力します。

ESC

前に指定した文字列を 最も長い明確な拡張子に置き換えます。

hardpaths

設定すると、ディレクトリスタック内のパス名は、シンボリックリンクのコンポーネントを含まないように展開されます。

histchars

2 文字の文字列。最初の文字は、履歴置換文字として ! を置き換えます。2 番目の文字は、高速置換のためのキャレット (^) を置き換えます。

history

履歴リストに保存される行数。数字が非常に大きいと、C シェルのメモリーすべてを消費してしまいます。設定を行わない場合、C シェルは最新のコマンドだけを保存します。

home

ユーザーのホームディレクトリ。ファイル名展開の ~ は、この変数の値を指します。

ignoreeof

設定すると、シェルは端末からの EOF を無視します。これにより、CTRL-D を誤って入力して C シェルを終了させてしまう ことが防げます。

mail

C シェルがメールの有無をチェックするファイルのリスト。値の最初のワードが数字の場合、メールをチェックする間隔を秒数 (デフォルトは 5 秒) で表します。

nobeep

あいまいなファイル名を C シェルに拡張させる際、一致したものを見つけたときに発生するビープ音を抑制します。

noclobber

既存のファイルが間違って破壊されないように 出力先のリダイレクションを制限します。> は新規のファイルへのみ出力先をリダイレクションできます。>> は既存のファイルへのみ出力先をリダイレクションできます。

noglob

ファイル名置換を禁止します。これは、シェルスクリプト内で一度ファイル名 (もしあれば) を取得した後、これ以上拡張したくないときに便利です。

nonomatch

パターンが一致しなかったとき、エラーではなくファイル名置換パターンを返します。パターンが間違っているときは、エラーを返します。

notify

設定すると、シェルはプロンプトの発行まで待つことなく、ジョブの終了を即座に報告します。

path

コマンドを検索するディレクトリのリストです。path は環境変数 PATH から初期化されます。この環境変数は、path を変更するたびに C シェルによって更新されます。NULL ワードは現在のディレクトリを指定します。デフォルトは通常、(/usr/bin .) です。.cshrc ファイルまたは .login ファイル (ログインシェルのみ) 内に設定することにより、csh の起動時にこの初期検索パスをオーバーライドできます。path が設定されないと、完全なパス名だけが実行されます。対話型の C シェルは、通常 .cshrc の読み取り後と path の再設定時には、必ずリストされたディレクトリの内容をハッシングします。新しいコマンドが追加されたときは、rehash コマンドを使用してテーブルを更新します。

prompt

対話型 C シェルのプロンプト文字列。非対話型シェルの prompt 変数は未設定のままです。対話型でのみ有効な .cshrc ファイル内の別名および他のコマンドは、 `if ($?prompt == 0) exit' という記述の後におくことができ、これによって、非対話型シェルの起動時間が短縮できます。prompt 文字列内の ! は、現在のイベント番号で置換されます。デフォルトプロンプトは通常の hostname% または特権ユーザー用の hostname# です。

$prompt の設定には次の 3 つの意味があります。

$prompt が設定されていない

非対話型シェル、$?prompt を評価する

$prompt が設定されているが、== "" である

.cshrc が which(1) コマンドによって呼び出されました。

$prompt が設定されており、!= "" である

通常の対話型シェル。

savehist

ユーザーがログアウトしたときに ~/.history に保管される履歴リストの行数。 savehist の値が大きすぎると、C シェルの起動処理が遅くなります。

shell

C シェルが存在するファイル。実行ビットがセットされているが システムにより実行できないようなファイルを解釈するために、シェルをフォークする際に使用します。

status

最新のコマンドによって返されたステータス。そのコマンドが異常終了した場合、ステータスに 0200 が加算されます。異常終了した組み込みコマンドは、終了ステータス 1 を返します。他のすべての組み込みコマンドは、ステータスを 0 に設定します。

time

コマンドの自動タイミングを制御します。1 つまたは 2 つの値が与えられます。最初の値は、報告するしきい値の CPU 時間 (秒) です。2 番目の値は、どのリソースについて報告するかを示すタグとテキストの文字列です。タグは、先頭にパーセント記号 (%) を付加した 1 つの英大文字で表します。認識できないタグはテキストとして表示します。

%D

使用された、共有でないデータ領域の平均サイズ (キロバイト)

%E

コマンド実行時間

%F

ページフォルト回数

%I

ブロック入力操作の数

%K

使用された、共有でないスタック領域の平均サイズ (キロバイト)

%M

プロセスの実行中に使用された最大実記憶領域

%O

ブロック出力操作の数

%P

エラップス時間 (E) に占める CPU 時間 (ユーザー時間 (U) とシステム時間 (S) の合計) のパーセンテージ

%S

ユーザープロセス内で、カーネルによって消費された CPU 時間 (秒)

%U

ユーザープロセスに使用された CPU 時間 (秒)

%W

スワップの回数

%X

使用されたの共有メモリ領域の平均サイズ (キロバイト)

デフォルトの出力は、%U、%S、%E、%P、%X、%D、%I、%O、%F、%W の順です。

verbose

履歴置換の後で各コマンドを表示します。

大規模ファイルの動作

ファイルが 2 ギガバイト (231 バイト) 以上ある場合の csh の動作については、largefile(5) を参照してください。

ファイル

~/.cshrc

各シェルの起動時に読み取られる

~/.login

ログイン時、ログインシェルによって .cshrc の後に読み取られる

~/.logout

ログアウト時、ログインシェルによって読み取られる

~/.history

次回のログイン時に使用できるよう履歴を保管する

/usr/bin/sh

`#' で始まらないシェルスクリプト用の Bourne シェル

/tmp/sh*

`<<' 用の一時ファイル

/etc/passwd

`~name' 用のホームディレクトリを指定したソース

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
CSI
有効

関連項目

bc(1), echo(1), limit(1), login(1), ls(1), more(1), pfcsh(1), pfexec(1), ps(1), sh(1), shell_builtins(1), tset(1B), which(1), df(1M), swap(1M), sysdef(1M), access(2), exec(2), fork(2), pipe(2), a.out(4), ascii(5), attributes(5), environ(5), largefile(5), termio(7I)

診断

You have stopped jobs.

ジョブ制御下で停止しているジョブ上で C シェルを終了しようとしました。すぐに再度 C シェルを終了すれば正常に終了しますが、停止しているジョブも終了します。

警告

シェルスクリプトを setuid して使用することは避けてください。

注

ワードは 1024 バイト以下でなければなりません。引数リストはシステムによって 1,048,576 バイト以下に制限されています。しかし、ファイル名の展開が適用できるコマンドの引数の最大数は 1706 です。コマンド置換は、引数リストに許されているのと同じ文字数までしか展開できません。ループを検出するために、シェルは別名置換を 1 行あたり 20 に制限しています。

コマンドが停止後再開されたとき、最初にコマンドを開始したディレクトリが現在のディレクトリと異なる場合、シェルは現在のディレクトリを表示します。これは、ジョブがディレクトリを内部で変更している可能性があるので、誤解を招きます (すなわち、間違っています)。

シェルの組み込み関数を停止または再開することはできません。a b c のような形式のコマンドの並びも、停止が試されるとうまく処理できません。b で一時停止するとシェルは c を実行しません。このことは、別名から展開された場合に特に注意が必要です。この現象は、コマンドの並びを括弧で囲んで サブシェルに実行させると避けられます。

ループ内のコマンドは ? でプロンプトしてきますが、履歴リストには格納されません。

制御構造は組み込みコマンドと みなすより構文解析をするべきです。これによって、制御コマンドはどこにでも置くことができ、| と組み合わせたり、& および ; などのメタシンタックスと組み合わせることが できるようになるはずです。

コマンド置換の出力に、修飾子 : を使えるようにすべきです。この : 修飾子を変数置換に使用するには 2 つの問題があります。 1 つはすべての修飾子が使用できるわけではないこと、もう 1 つは一度の置換に 1 つの修飾子しか許されないことです。

履歴置換内の g (グローバル) フラグは、すべてのワード内のすべての一致箇所ではなく、各ワード内の最初の一致箇所にしか適用されません。通常のテキストエディタは、置換コマンドに g が指定されると、すべての一致箇所の指定とみなすのが一般的です。

クォートの規則は複雑です。二重引用符内で変数置換を強要するエスケープ文字を 無効にするということは、混乱を招いて理解しにくくなり、Bourne シェルとの一貫性も保たれません。

シェルが、シンボリックリンクを無視してしまうことがあります。hardpaths 変数を設定すればこれを緩和できます。

次に示すように、組み込みコマンドを複数回使ってできた重複したパス名は、すべてユーザーが手動で取り除かなければなりません:

set path = pathnames
setenv PATH = pathnames

シェルスクリプトまたは .cshrc ファイルが次のようなコマンドを発行したときに、よくパス名が重複します。

`set path=(/usr/local /usr/hosts $path)'

このコマンドは、指定したディレクトリがパス名リスト内にあることを保証する場合に使用されます。

標準出力と標準エラーを分けて出力する唯一の方法は、以下のようにサブシェルを起動することです。

command > outfile ) >& errorfile

一般的な使用には十分耐えられますが、C シェルを少し複雑に使うと予期しない結果を招くことがあります。

csh をログインシェルとして起動しても、.login がホームディレクトリに存在しない場合は、csh は /etc/.login を読み取ります。

存在しないコマンドのインタプリタを実行しようとするシェルスクリプトを、シェルが処理した場合、シェルはシェルスクリプトが存在しないという間違った診断メッセージを 返します。

バグ

現在 time 組み込みコマンドは出力の最後 6 フィールドに対する値を計算しません。これらのフィールドに 0 の値を表示します。

example %time ls -R
        9.0u 11.0s 3:32 10% 0+0k 0+0io 0pf+0w