tcsh - C シェルの呼び出し

Format

tcsh [-bcdeFfimnqstvVxX]

tcsh -l
注: -l は、i の大文字ではなく、L の小文字です。

説明

tcsh シェルは、バークレー UNIX C シェル tcsh の拡張完全互換バージョンです。 これは、対話式ログイン・シェルとしても、またシェル・スクリプト・ コマンド・プロセッサーとしても使用可能なコマンド言語インタープリターです。 このシェルは、コマンド行エディター、プログラマブル・ワード補完機能、スペル訂正機能、ヒストリー・メカニズム、およびジョブ制御を含んでおり、構文が C と似ています。

このシェルは、明示的に tcsh コマンドを入力して起動すること ができます。 引数として -l オプションだけを指定してシェルを起動 することによっても、ログイン・シェルを指定することができます。

ログイン・シェルは、システム・ファイル /etc/csh.cshrc および /etc/csh.login から のコマンドを実行して開始されます。 その後、ユーザーのホーム・ディレクトリー内のファイルからコマンドを実行します。最初に、 ~/.tcshrc、次に ~/.history (または histfile シェル変数の値)、 それから ~/.login、最後に ~/.cshdirs (または dirsfile シェル変数の値) です。 シェルは、 /etc/csh.cshrc の後に /etc/csh.login を 読み取ります。

非ログイン・シェルは、呼び出し時に /etc/csh.cshrc および ~/.tcshrc または ~/.cshrc だけしか読み取りません。

ログインごとに一度だけ実行する必要のある、コマンドに似た stty は、通常、ユーザーの ~/.login ファ イルに入ります。

通常のケースでは、シェルは端末からのコマンドの読み取りを開始し、> でプロンプトを表示します。シェルは、コマンド入力行を繰り返し読み取り、ワードに分割し、それをコマンド・ヒストリー・リストに入れ、その行の各コマンドを構文解析して実行します。 コマンド実行を参照してください。

tcsh シェル・セッションからのログアウトは、空の行に ^Dlogout、または login を入力するか (ignoreeof シェル変数を参照してください)、シェルの自動ログアウト・メカニズムを使用して行うことができます。 ログイン・シェルは、終了時に、logout シェル変数 を状況に応じて normal か automatic に設定し、その後ファイル /etc/csh.logout および ~/.logout からコマンドを実行します。

システムのログイン・ファイルおよびログアウト・ファイルの名前 は、種々のバージョンの csh シェルとの互換性を保つため、システムによっ て異なります。tcsh ファイルを参照してください。

制約事項: 自動変換を有効にした状態でタグ付きスクリプトが実行されている場合ロケールのコード・ページは SBCS である必要があります。

Options

tcsh シェルの最初の引数 (引数 0) が - (ハイフン) である場合、それはログイン・シェルです。 引数として -l だけを指定 して tcsh シェルを起動することによっても、ログイン・シェルを指定する ことができます。

z/OS UNIX システム・サービス tcsh シェルは、コマンド行で以下のオプションを受け入れます。
-b
強制的にオプション処理を中断し、これ以降のシェル引数はすべて 非オプション引数として扱われるようにします。 残りの引数はシェル・オプションして解釈されません。 これは、あいまいさを避けて間違いなくオプションをシェル・スクリプト に渡すのに使用できます。
-c
コマンド・シェルに保管されているコマンドを読み取って実行します (この オプションは必ず指定しなければならず、単一引数でなければなりません)。 残りの引数はすべて argv シェル変数に入れられます。
-d
ログイン・シェルかどうかにかかわりなく、 ~/.cshdirs から ディレクトリー・スタックをロードします。
-e
起動されたコマンドが異常終了するか、またはゼロ以外の出口 状況を生成した場合に、シェルを終了させます。
-i
端末ではないような場合でも、対話式シェルを起動し、最上位入力を 促します。 シェルの入力および出力が端末で行われる場合、このオプションを 指定しなくてもシェルは対話式になります。
-l
ログイン・シェルを起動します。 -l だけをオプションとし て指定する場合にのみ使用可能です。
注: -l は、i の大文字ではなく、L の小文字です。
-m
~/.tcshrc が実効ユーザーに属してい なくても、これをロードします。
-n
コマンドを解析しますが、実行はしません。 これは、シェル・スクリ プトのデバッグに役立ちます。
-q
SIGQUIT を受け入れ、これがデバッガーのもとで使用される際に動作 します。 ジョブ制御は使用不可にされます。
-s
標準入力からのコマンド入力を受け取ります。
-t
1 行の入力を読み取って実行します。 ¥ (円記号) は、この行の終わりで改行するのを避けて別の行に継続するために使用できます。
-v
ヒストリー置換の後にコマンド入力がエコーされるように verbose シェル変数を設定します。
-V
~/.tcshrc を実行する前でも verbose シェル変数を設定します。
-x
実行の直前にコマンドがエコーされるように echo シェル変数を設定します。
-X
これと -x との関係は、-V-v との 関係と同じです。

オプション引数を処理した後に引数がまだ残っていて、-c-i-s、または -t のいずれも 指定されていない場合には、最初の引数が、実行されるコマンドのファイル (つまりスクリプト) の名前とみなされます。 シェルはこのファイルを開き、その名前を保管します。おそらく その名前は $0 で再置換されます。 多くのシステムでは、シェル・スクリプトがこのシェルとの互換性のないようなシェルを使用するので、tcsh シェルではその文字が # ではない (つまりコメントで始まっていない) スクリプトを実行するためにそのような標準シェルを使用します。

残りの引数は argv シェル変数に入れられます。

tcsh シェルの編集

コマンド行エディターについて説明されています。 その後、「補完機能とリスト機能」ならびに「スペル訂正機能」について解説します。 これらはエディター・コマンドとして実装されている 2 組の機能です。 最後の「エディター・コマンド」のトピックでは、tcsh シェルに固有のエディター・コマンドおよびそれらのコマンドのデフォルト・バインディングをリストして説明します。

コマンド行エディター

コマンド行入力は、GNU Emacs または vi で使用されるキー・シーケンスと非常によく似たキー・シーケンスを使って編集することができます。 エディターは、編集シェル変数を設定している場合にしかアクティブになりま せん。編集シェル変数はデフォルトでは対話式シェル内にあります。 bindkey 組み込みコマンドはキー・バインディングを表示したり変 更したりできます。 デフォルトでは、Emacs タイプのキー・バインディングが使用されますが、bindkey でそのキー・バインディングを vi タイプのバインディング に変更することができます。

シェルは矢印キーを常に次のものにバインドします。
DOWN
ヒストリーの下方移動
UP
ヒストリーの上方移動
文字後方移動
文字前方移動
ただし、このバインディングにより別の単一文字バインディングが変更され る場合は別です。 そうしたバインディングを防ぐには、矢印キーのエスケープ・シーケンス を settc で空ストリングに設定します。
その他のキー・バインディングの大半は、emacs ユーザーおよび vi ユーザ ーが予期しているようなものであり、それらは bindkey を使って 容易に表示することができます。 bindkey を使えば、エディター・コマンドとその簡単な説明をリス トすることもできます。
注: エディター・コマンドでのワード の概念は、tcsh シェルのそれとは異なっています。 エディターは、シェル変数ワード文字にはない任意の 非英数字の文字でワードを区切ります。 tcsh シェルは、空白文字および特別の意味を持つ一部の文字のみを認識します。それらの文字は、コマンド構文に示してあります。

補完機能とリスト機能

tcsh シェルは、固有の省略形が与えられると、それを補完にできる 場合がよくあります。 ワードの一部 (例えば、ls /usr/lost) を入力してか ら、タブ・キーを押して complete-word エディター・ コマンドを実行してください。 このシェルが、入力バッファー内の不完全なワードを完全なワードに置換し、ファイル名 /usr/lost を完全な名前 /usr/lost+found にします。 (入力を高速化し、補完が正常に行われたことを示す視覚指標を提供するために、末尾の / (スラッシュ) が使用されます。補完機能により、補完されたディレクトリーの末尾には / が追加され、補完された他のワードの末尾にはスペースが追加されます。 addsuffix シェル変数を使用すれば、この設定を解除して、このアクションが行われないようにすることができます。) 一致するものが 見つからない場合 (例えば、/usr/lost+found が存在しない場合など) は、端末のベルが鳴ります。 ワードがすでに完全なものである場合 (例えば、ご使用のシステムに /usr/lost が存在する場合や、あらかじめすべてを入力しておいた場合など) は、/ またはスペースが末尾に追加されます (/ やスペースがまだ末尾に付いていない場合)。

補完機能は、行の末尾以外ならどこででも作用し、テキストが補完さ れると、行の残りの部分は右側に押されることになります。 ワードの中間で補完が行われると、カーソルの右側の文字が残ることが多くあります。 そのように残った文字は、削除する必要があります。

コマンドと変数は大体同じ仕方で補完することができます。 たとえば、システム上で emacs「em」 で始まる唯一のコマンドである場合、em [tab] と入力すると、「em」 から 「emacs」 が完成します。 補完機能は、パス内の任意のディレクトリーの中にあるコマンドを検出する ことができ、またある絶対パス名を与えられた場合もコマンドを検出できます。 echo $ar[tab] と入力すると、'ar' で始まる変数がほかになければ、'$ar' が補完されて '$argv' になります。

シェルは入力バッファーを解析して、補完するワードがファイル名なのか、コマンドなのか、あるいは変数なのかを判別します。バッファー内の最初の単語と「;」「|」「|&」「&&」または「||」に続く最初の単語はコマンドと見なされます。 '$' で始まるワードは変数とみなされます。 その他のものはファイル名です。 空の行はファイル名として 補完されます。

^D を入力して delete-char-or-list-or-eof エディター・コマンドを実行することで、可能性のある完全なワードをリストすることができます。 tcsh シェルは、ls-F 組み込みを使用する可能性のある完了をリストし、プロンプトおよび未完了のコマンド行を再印刷します。例えば:
> ls /usr/l[^D]
lbin/ lib/ local/ lost+found/
> ls /usr/l 
autolist シェル変数が設定されている場合、tcsh シェルは補完機能が失敗したら必ず、残りの選択項目 (ある場 合) をリストします。
> set autolist
> nm /usr/lib/libt[tab]
libtermcap.a@ libtermlib.a@
> nm /usr/lib/libterm

autolistambiguous に設定されている場合、選択項目がリストされるのは、一致するものが複数個あり、補完機能がマッチングを行う名前に新しい文字を追加しなかった場合だけです。

補完されたファイル名には、 変数、~ (波形記号: 『ファイル名の置換』を参照) で省略された自分または他人のホーム・ディレクトリー、 および = (等号: ディレクトリー・スタック置換を参照) で省略されたディレクトリー・スタック項目が含まれます。 次に例を示します。
> ls ~k[^D]
kahn kas kellogg
> ls ~ke[tab]
> ls ~kellogg/

or

> set local = /usr/local
> ls $lo[tab]
> ls $local/[^D]
bin/ etc/ lib/ man/ src/
> ls $local/
 
変数は、expand-variables エディター・コマンドを使って明示的に展開することもできます。

delete-char-or-list-or-eof は行の最後にリストす るだけです。行の中間あたりではカーソル位置の文字を削除し、空の行の場 合にはログアウトしてしまいます。また ignoreeof が設定 されている場合には何も行われません。 M-^Dは、エディター・コマンド list-choices にバインドされ、行の任意の場所に補完の可能性をリストします。必要に応じて、bindkey 組み込みコマンドを使用して list-choices (または、削除するまたは削除しない、リストおよびログアウト、delete-char-or-list-or-eof の下にリストされている関連するエディター・コマンドのいずれか) を ^D にバインドできます。

complete-word-fwd および complete-word-back エディター・コマンド (デフォルトでは いずれのキーにもバインドされていない) を使用すれば、存在する 補完のリスト中を前後に移動して、現行のワードをリスト中 の次のワードまたは前のワードに置き換えることができます。

tcsh シェル変数 fignore は、補完機能が無 視する接尾部のリストに設定することができます。 以下の点を考慮してください。
    > ls
    Makefile condiments.h~ main.o side.c
    README main.c meal side.o
    condiments.h main.c~
    > set fignore = (.o \~)
    > emacs ma[^D]
    main.c main.c~ main.o
    > emacs ma[tab]
    > emacs main.c 
「main.c〜」「main.o」は、fignore の接尾辞で終わるため、完了によって無視されます (ただし、リストには表示されません)。ファイル名の置換で説明されているように、home に展開されないようにするには、〜の前に\が必要です。完了が 1 つしかない場合、fignore は無視されます。

complete シェル変数が強化するに設定されている場合、下記が完了する: 1.) 大文字小文字を無視します。 2.) ピリオド、ハイフン、および下線 (「.」、「-」、および「_」) を、ワード区切り文字、ハイフン、およびアンダースコアーに相当するものと見なします。

以下のようなファイルがあるとします。
comp.lang.c comp.lang.perl comp.std.c++
comp.lang.c++ comp.std.c
mail -f c.l.c[tab] と入力すると、mail -f comp.lang.c になり、^D には comp.lang.c と comp.lang.c++ がリストされます。mail -f c..c++[^D] は、comp.lang.c++ および comp.std.c++ をリストします。次のディレクトリで rm a--file[^D] と入力すると
A_silly_file a-hyphenated-file another_silly_file
3 つのファイルすべてがリストされます。これは大文字小文字が無視され、ハイフンと下線が同じとみなされるからです。 ただし、ピリオドはハイフン や下線と同等ではありません。
補完機能とリスト機能は、いくつかの他の tcsh シェル変数の影響も受けま す。例えば、recexact を設定すると、さらに入力すれ ばもっと長いもので一致するものがある場合でも、存在する最も短い 特定の一致ワードだけが得られるようになります。 次に例を示します。
> ls
fodder foo food foonly
> set recexact
> rm fo[tab]
「fo」「fod」または「foo」に展開される可能性があるため、ビープ音だけが鳴りますが、別の「o」を入力すると、
> rm foo[tab]
> rm foo 
completion は「foo」で完了し、「food」「foonly」も一致しています。autoexpand は、各完了試行の前に expand-history エディター・コマンドを実行するように設定でき、correct は、「return」を押した後にコマンドを自動的に完了するように設定できます。matchbeep は、さまざまな状況で完了ビープ音を鳴らすか、ビープ音を鳴らさないように設定できます。また、nobeep は、まったくビープ音を鳴らさないように設定できます。nostat は、ディレクトリーと一致するディレクトリーとパターンのリストに設定して、完了メカニズムがそれらのディレクトリーを stat(2) するのを防ぐことができます。
注: 補完機能は正常に、しかも高速で実行されます。 nostat の設定は、listflags 変数を使用すると明らかになります。 次に例を示します。
>set listflags=x>
ls-F /u/pluto
Dir1/exe1*
>set nostat=(/u/pluto/)
>ls-F /u/pluto
Dir1exe1
>
ただし、末尾の / (スラッシュ) を保持する場合には、nostat を設定する際に注意が必要です。
listmax および listmaxrows を設定すると、最初に確認されることなく、リストされている項目および行の数を制限することができます。recognize_only_executables は、コマンドをリストするときにシェル・リストのみを実行可能にするように設定できますが、非常に遅くなります。

最後に、complete 組み込みコマンドを使用すれば、ファイ ル名やコマンドや変数以外のワードを補完する方法をシェルに指 示することができます。 補完機能とリスト機能はグロブ・パターン (ファイル名の置換を参照)) に 対しては働きません。しかし、list-glob およ び expand-glob エディター・コマンドがグロブ・パ ターンに対して同等の機能を実行します。

スペル訂正機能

tcsh シェルは、ファイル名、コマンド、および変数名を補完およびリスト するだけでなく、ときにはそれらのスペルを訂正することもできます。

spell-word エディター・コマンド (通常は M-s および M-S にバインドされ、M = Meta Key またはエスケープ (ESC) キー) および spell-line 付きの入力バッファー全体 (通常は M-$ にバインドされている) を使用して、個々のワードのスペルを訂正できます。correct シェル変数を「cmd」に設定してコマンド名を訂正するか、または「all」を指定して、戻されるたびに行全体を訂正することができます。

上記のいずれかの仕方でスペル訂正機能を起動した場合に、コマンド行の一 部のスペルが誤っているとシェルが判断すると、訂正された行を表示して 入力を促します。
> set correct = cmd
> lz /usr/bin
CORRECT>ls /usr/bin (y|n|e|a)?
ここで、y またはスペースを入力して訂正済みの行を実行するか、e と応答して入力バッファー内の未訂正のコマンドをそのまま残すか、a と応答して (^C を押した場合のように) コマンドを打ち切るか、その他のものを押して元の行を未変更のまま実行することができます。

スペル訂正機能はユーザーが定義した補完を認識 します (complete 組み込みコマンドを参照)。 補完を定義する位置の入力ワードが、補完のリストにあるワードと 似ている場合には、スペル訂正機能はスペルの誤ったものを登録して、それ を正しいものとして示します。 しかし、入力ワードが、その位置での 補完のいずれとも一致しなければ、スペル訂正機能は スペルの誤ったものを登録しません。

補完機能と同様に、スペル訂正機能は行のどの位置ででも働き、行の残りの 部分を右側に押しやり、おそらく余分の文字をカーソルの右方に残します。

スペル訂正機能は、意図した通りに働くと は限りません。これは一般的には試験的な機能とお考えください。

エディター・コマンド

bindkey はキー・バインディングをリストします。bindkey -l はエディター・コマンドをリストして、それらの簡単 な説明を示します。 ここでは、新規のエディター・コマンドまたは特に興味 深いエディター・コマンドだけを説明します。 それぞれのエディター・コマンドのキー・バインディングの説明については、emacs および vi を参照してください。

各コマンドがデフォルトでバインドされる文字は括弧で囲んで指定します。^文字は制御文字を意味し、M-文字はメタ文字を意味し、メタ・キーのない端末ではエスケープ文字として入力されます。 大/小文字の区別は重要ですが、デフォルトで文字にバインドされているコマンドは、便宜上、大文字と小文字の両方にバインドされています。

complete-word
補完機能とリスト機能で説明されているようにワードを補完します。
complete-word-back
complete-word-fwd に似ていますが、リスト の最後から先頭へと進むという点で異なります。
complete-word-fwd
現在の単語を、考えられる補完のリスト内の最初の単語に置き換えます。リストを通して、繰り返すことでステップ・ダウンできます。 リストの最後に到達すると、ビープ音が鳴り、完全でないワードに戻ります。
complete-word-raw
complete-word と似ていますが、ユーザー定義の補完を無視するという点で異なります。
copy-prev-word
現在行の直前のワードを入力バッファーにコピーします。 insert-last-word も参照してください。
dabbrev-expand
現行のワードが先行サブストリングとなっているよ うな、前に現れている最新のワードへ現行のワードを展開し、必要に応じて ヒストリー・リストを (一度だけ) 循環します。 途中で入力しないで dabbrev-expand を繰り返すと、順にその前のワードに変更されてゆき、一致した同一のものをスキップします。history-search-backward の動作と大体似ています。
delete-char (バインドされていません)
カーソル位置の文字を削除します。 delete-char-or-list-or-eof も参照してください。
delete-char-or-eof (バインドされていません)
カーソル位置に文字がある場合には delete-char を実行し、空ファイルに対しては end-of-file を実行します。 delete-char-or-list-or-eof も参照してください。
delete-char-or-list (バインドされていません)
カーソル位置に文字がある場合には delete-char を実行し、行の最後では list-choices を実行します。 delete-char-or-list-or-eof も参照してください。
delete-char-or-list-or-eof (^D)
カーソル位置に文字がある場合には delete-char を実行し、行の最後では list-choices を実行し、空の行に対しては end-of-file を実行します。 delete-char-or-eofdelete-char-or-list およ び list-or-eof も参照してください。
ヒストリーの下方移動
up-history と似ていますが、下方移動して、元の入力行で停止するという点で異なっています。
end-of-file
ファイル終わりのシグナルを送り、tcsh シェルが終了します。ただし、そうならないように ignoreeof シェル変数が設定さ れていないことを条件とします。 delete-char-or-list-or-eof も参照してください。
expand-history (M- スペース)
現行ワードの中のヒストリー置換子を展開します。 ヒストリー置換を参照してください。 magic-spacetoggle-literal-history 、および autoexpand シェル変数も 参照してください。
expand-glob(^X-*)
カーソルの左方のグロブ・パターンを展開します。 次に例を示します。
>ls test*[^X-*]
上記は次のように展開されます。
>ls test1.c test2.c
これは、'test' で始まるファイルがディレクトリー内に 2 つしかない場 合です。 ファイル転送プロトコル (File name substitution を参照。
expand-line (バインドされていません)
expand-history と似ていますが、入力バッファー内のそれぞれのワードのヒストリー置換子を 展開するという点で異なっています。
expand-variables (^X-$)
カーソルの左方の変数を展開します。 変数置換を参照してください。
history-search-backward (M-p、M-P)
入力バッファー内の現在の内容で始まっているコマンドを見つけるた めにヒストリー・リストを上方に向かってカーソル位置まで検索し、検索した コマンドを入力バッファーにコピーします。 検索ストリングは、「*」、「?」、「[]」、または「{}」を含むグロブ・パターン (ファイル名の置換を参照) にすることができます。up-historydown-history は、ヒストリー・リスト内の該当するポイントから続行されます。 Emacs モード専用です。 history-search-forward および i-search-back も参照してください。
history-search-forward(M-n、M-N)
history-search-backward と似ていますが、下方に向かって検索するという点で異なっています。
i-search-back (バインドされていません)
history-search-backward のように上方に向 かって検索し、カーソルをパターンの最後に位置付けた状態で、最初に見つかった一致したものを入力バッファーにコピーし、'bck: ' と その最初に見つかった一致したものを表示して入力を促します。 追加の文字を入力して、検索を拡張できます。i-search-back と入力して、同じパターンで検索を続行し、必要に応じて履歴リストを折り返すことができます (これを機能させるには、i-search-back を 1 つの文字にバインドする必要があります)。または、次の特殊文字のいずれかを入力できます:
^W
カーソル位置のワードの残りの部分を検索パターンに付加します。
delete (または backward-delete-char にバインドされた任意の文字)
最後の文字の働きを取り消して、適切な場合には検索パターンから 文字を削除します。
^G
直前の検索が正常に実行された場合に、検索全体を打ち切ります。 正常に実行されなかった場合には、正常に実行された最後の検索に戻 ります。
escape
検索を終了し、現在行を入力バッファーに残します。
self-insert-command にはバインドされていない その他の文字を入力すると、検索は終了し、現在行が入力バッファ ーに残され、入力された文字は正常入力として解釈されます。 特にキャリッジ・リターンの場合には、現在行が実行されます。 Emacs モード専用です。 i-search-fwd およ び history-search-backward も参照してください。
i-search-fwd
i-search-back と似ていますが、下方に向かって検索するという点で 異なっています。
insert-last-word (M-_)
直前の行の最後のワード (!$) を入力バッファーに挿入します。 copy-prev-word も参照してください。
list-choices (M-D)
補完機能とリスト機能で説明されているように存在する補完をリストします。 delete-char-or-list-or-eof も参照してください。
list-choices-raw (^X-^D)
list-choices と似ていますが、ユーザー定義 の補完を無視するという点で異なっています。
list-glob (^X-g, ^X-G)
(ls-F を介して) カーソルの左方のグロブ・ パターン (ファイル名の置換を参照) と一致するものをリストします。
list-or-eof (バインドされていません)
list-choices を実行するか、空の行に対して は end-of-file を実行します。 delete-char-or-list-or-eof も参照してください。
magic-space (バインドされていません)
expand-history のように、現在行にヒストリー置換を展開し、スペースを追加します。magic-space は、スペース・バーにバインドされるように設計されていますが、デフォルトではバインドされていません。
normalize-command (^X-?)
PATH の中から現行ワードを検索し、それが見つかったなら、実行可能 ファイルへの絶対パスでそれを置き換えます。 特殊文字は引用符で囲みます。 別名は展開して引用符で囲みますが、別名内のコマンドはそのようにはしま せん。 このコマンドは、コマンドを引数として取るようなコマンド (例えば、dbxsh -x) で役立ちます。
normalize-path (^X-n, ^X-N)
symlinks シェル変数の expand 設定で説明されているように現行ワードを展開します。
overwrite-mode (バインドされていません)
入力モードと上書きモードの切り替えを行います。
run-fg-editor (M-^Z)
現在の入力行を保管し、EDITOR または VISUAL 環境変数のファイル名 部分の最後のコンポーネントと同じ名前 (どちらの変数も設定されていなければ、ed または vi) を持つ停止済みジョブを探します。 そのようなジョブが見つかったなら、fg %job が入力された場合の ようにそれが再始動されます。 これを使用すると、エディターとシェルの間で 相互に容易に切り替えられます。 これをもっと簡単に行えるように、このコマンドを ^Z にバインドする人々もいます。
run-help (M-h、M-H)
補完機能のルーチンと同じ現行コマンドの概念を用いて、現行コマンドに関する資料を探し、それを出力します。 ページャーを使用する方法はありません。run-help はショート・ヘルプ・ファイル用に設計さ れています。 資料は、command.helpcommand.1command.6command.8 または command と名付けられたファイル (これは HPATH 環境変数にリストされているディレクトリーのいずれかに入っている必要があります) に入っていなければなりません。 複数のヘルプ・ファイルがある場合には、最初のものだけが出力されます。
self-insert-command (テキスト文字)
挿入モード (デフォルト) では、入力文字を入力行のカーソル位置の文字 の後に挿入します。 それ以外のモードでは、カーソル位置の文字を入力文字 で置き換えます。 行が変わっても通常は入力モードのままですが、inputmode シェル変数 を insert または overwrite に設定すれば、各行の先頭でエディターを該当するモードに することができます。 overwrite-mode も参照してください。
sequence-lead-in (矢印接頭部、メタ接頭部、^X)
続く文字が複数キー・シーケンスの一部であることを指示します。 あるコマンドを複数キー・シーケンスにバインドすると、2 つの バインディング (先頭文字と sequence-lead-in と のバインディングおよびシーケンス全体とコマンドとのバインディング) が できあがります。 sequence-lead-in にバインドされた文字で始まって いるすべてのシーケンスは、別のコマンドにバインドされていない限り、事実上 undefined-key にバインドされます。
spell-line (M-$)
spell-word のように入力バッファー内の各ワードのスペルを訂正しようとします。ただし、スイッチや置換子などの問題を回避するために、先頭文字が '-''!''^'、または '%' であるワードや、'¥''*'、または '?' が含まれるワードは無視されます。 スペル訂正機能を参照してください。
spell-word (M-s、M-S)
スペル訂正機能で説明されているように現行ワードのスペル を訂正しようとします。 パス名と思われるワードの各コンポーネントを検査します。
toggle-literal-history (M-r、M-R)
入力バッファー内のヒストリー置換子を展開または展開解除します。 expand-history シェル変数およ び autoexpand シェル変数も参照してください。
undefined-key (バインドされていない任意のキー)
ビープ音を鳴らします。
up-history (上矢印、^P)
ヒストリー・リスト内の直前の項目を入力バッファーにコピーします。 histlit が設定されている場合には、項目の リテラル形式を使用します。 これを繰り返せば、ヒストリー・リスト内を上方へ進むことができ、最上部で停止します。
vi-search-back (?)
? でプロンプトが表示される検索ストリング (history-search-backward の場合と同様に、グロブ・パターンにすることができます) を検索し、入力バッファーにコピーします。 一致するものが見つからなければ、ベルが鳴ります。 Enter キーを押すと検索は終了し、最後に見つかった一致するも のが入力バッファーに残されます。 Escape キーを押すと検索が終了し、一致を実行します。vi モードのみ。
vi-search-fwd (/)
vi-search-back と似ていますが、下方に 向かって検索するという点で異なっています。
which-command (M-?)
入力バッファーの最初のワードで which (組み込みコマンド)を実行します。which は、置換とパス検索の後にシェルによって実行されるコマンドを表示します。 表示されたコマンドは、 ユーザーの実効 ID に基づいたセキュリティー製品によるアクセス検査をパスしています。

コマンド構文

tcsh シェルは、入力行をブランクやタブの位置でワードに分割します。 特殊文字「&」、「|」、「;」、「<」、「>」、「(」、「)」、および二重文字「&&」、「||」、「<<」、「>>」は、空白文字で囲まれているかどうかに関係なく、常に個別の単語です。

tcsh シェルの入力が端末からではないときには、コメントを開始するのに 文字 '#' が用いられます。 それぞれの # および # が現れている入力行の残りの部分は、廃棄されてから構文解析が続行されます。

特殊文字 (ブランクやタブを含む) は、その前に円記号 (&#xa5;) を付けるか、あるいは単一引用符 (')、二重引用符 (") または開き引用符 (`) で囲むことにより、特殊な意味を持たないようにすることができ、また状況に応じて別のワードの一部とすることも可能です。 前に &#xa5; が付けられた改行は、これ以外の方法で引用されているのでなければ、ブランクと等しくなりますが、引用符で囲まれると、このシーケンスは改行になります。

また、ヒストリー置換子以外の置換子 (置換を参照) はすべて次の方法で抑制することができます。すなわち、置換子が含まれているストリング (またはストリングの一部) を単一引用符で囲むか、重要文字 (例えば、変数置換またはコマンド置換についてはそれぞれ '$' または '`') を &#xa5; を使って引用するという方法です。(別名置換も例外ではありません。別名として定義されているワードの任意の文字を何らかの方法で引用するなら、別名の置換が抑制されます。 別名を引用する場合、通常は別名の前に円記号を付けます。) ヒストリー置換は、単一引用符ではなく、円記号を使って抑制します。 ストリングを二重引用符または開き引用符で囲んでも変数置換やコマンド 置換は行われますが、その他の置換は抑制されます。

テキストを単一引用符または二重引用符で囲むと、単一ワード (または単一 ワードの一部) になります。 そのストリングの中のメタキャラクター (ブランクやタブを含む) は 独立したワードとはなりません。 ある特別な場合だけは、二重引用符で囲まれたストリングが複数のワードと見なされることがありますが (コマンド置換)を参照)、単一引用符で囲 まれたストリングの場合にはそのようなことはありません。 開き引用符は特殊なものであり、コマンド置換のシグナルを送ります。その結果、複数のワードになる場合があります。

複雑なストリング、特に引用に用いられる文字を含んでいるストリングの場合には、混乱を引き起こす可能性があります。 引用符は、人が文章を書く場合のように用いる必要はないことを覚え ておいてください。 ストリング全体を引用するのではなく、ストリングの中の引用する必要のある 一部だけを、状況に応じて種々の引用方法で引用するほうが簡単です。

backslash_quote シェル変数を設定すれば、円記号が常に &#xa5;'、および " を引用するように指定できます。 このアクションにより、複雑な引用を簡単にすることができますが、csh (または tcsh) スクリプトでは構文エラーが発生する可能性があります。

置換

tcsh シェルは、入力に対してさまざまな変換を発生順で実行します。 このトピックでは、データ構造とコマンド、およびそれらに影響する変数について説明しています。 置換は、コマンド構文で説明されているように引用によって抑制することができます。

ヒストリー置換

端末から入力されるそれぞれのコマンド (または イベント) はヒストリー・リストに保管されます。 直前に入力されたコマンドは必ず保管されます。また history シェル変数を使用すれば、保管するコマン ドの数を設定することができます。 histdup シェル変数を使用すれば、重複するイベ ントや連続して重複するイベントを保管しないよう設定することができます。

保管されるコマンドには、1 から順番に番号が付けられ、またタイム・ スタンプも付けられます。 イベント番号を使用しなければならないとは限りませんが、prompt シェル変数に感嘆符 (!) を入れることにより、現行のイベント番号をプロンプトの一部にすることができます。

シェルは、実際に展開形式およびリテラル (非展開) 形式でヒストリーを 保管します。 histlit シェル変数を設定すると、ヒストリーを表示お よび保管するコマンドはリテラル形式を使用します。

history 組み込みコマンドは、ヒストリー・リストの出力、ファイルへの保管、復元および消去を、いつでも行うことができます。savehist シェル変数および histfile シェル変数を使えば、ログアウト時にヒストリー・リストが自動的に 保管されたり、ログオン時にヒストリー・リストが復元されるように設定 することができます。

ヒストリー置換により、ワードがヒストリー・リストから入力ストリームに取り込まれます。そのため、コマンドを繰り返したり、現行コマンドで直前のコマンドの引数を 繰り返したり、あるいは直前のコマンドでのスペルの間違いを修正したりするこ とが容易になり、ほとんど入力しなくても高いレベルの信頼性でそれらが行われる ようになります。

ヒストリー置換子は ! の文字で開始されます。 ヒストリー置換子は入力ストリーム内のどの 位置でも開始できますが、ネストはされません。 特別な意味を防ぐために、「!」の前に「\」を付けることができます。便宜上、「!」の後に空白、タブ、改行、= または (が続く場合、「!」は変更されずに渡されます。ヒストリー置換は、入力行が ^ で始まる場合にも発生します。ヒストリー置換を表示に使用する文字 (! と ^ (キャレット)) は、histchars シェル変数を設定することで変更できます。 ヒストリー置換子を含んでいる入力行は、実行され る前に出力されます。

ヒストリー置換子は、イベント指定 (ワードの取り出し元に なるイベントを示すもの)、ワード指定子 (選択され たイベントから特定のワードを選択するもの)、および 修飾子 (選択されたワードを操作するもの)、あるい はそれらすべてを含んでいる場合があります。

イベント指定には次のものがあります。
n
特定のイベントを指す番号。
-n
現行イベントの前のイベント n を指すオフセット。
#
現行イベント。 これは、再帰の検査が行われない csf では注意して使用する必要があります。tcsh では 10 レベルの再帰が可能です。
!
直前のイベント (-1 同等) です。
s
最初のワードがストリング s で始まっている最新のイベント。
?s?
ストリング s が含まれている最新のイベント。 2 番目の ? は、直後に改行が続く場合は省略できます。
例えば、ある人の次のようなヒストリー・リストの一部を考慮してみてください。
9 8:30 nroff -man wumpus.man
10 8:31 cp wumpus.man wumpus.man old
11 8:36 vi wumpus.man
12 8:37 diff wumpus.man.old wumpus.man
コマンドにはイベント番号とタイム・スタンプが付けられています。 まだ入力されていない現在のイベントは、イベント 13 です。!11 と !-2 はイベント 11 を参照しています。!! は前のイベント 12 を参照しています。: (コロン) が続く場合、!! は ! に省略できます。!n はイベント 9 を参照します。イベント 9 は n で始まります。!?old? は old を含むイベント 12 を参照します。 ワード指定子も変更子もなければ、ヒストリー参照は単純にイベント全体に展開さ れるので、コピー・コマンドを再実行するには !cp を入力し、diff 出力が画面の上部からはみでた場合には !!|more を入力します。

ヒストリー参照は、必要に応じて周囲のテキストから中括弧で孤立させることが できます。 例えば、!vdoc は vdoc で始まっているコマンドを見つけようとしますが、この例ではそれはありません。しかし、!{v}doc は明示的に vi wumpus.mandoc に展開されます。 中括弧に囲まれていても、ヒストリー置換子はネストされません。

csh は、例えば !3d を文字 d の付いているイベント 3 に展開しますが、tcsh はそれを 3d で始まっている最後のイベントに展開します。つまり、完全に数値だけの引数しかイベント番号として扱いません。 これによって、番号で始まっているイベントを再呼び出しすることが可能に なります。 !3d を csh の場合のように展開するには、!&#xa5;3d としてください。

あるイベントからワードを選択するには、イベント指定の 後に : (コロン) と選択するワードの指定子を付けることができます。入力行のワードには 0 から番号が付けられ、最初の (通常はコマンド) ワードは 0、2 番目のワード (最初の引数) は 1 というように番号が付けられます。 基本的なワード指定子は次のとおりです。
0
最初のコマンド・ワード。
n
n 番目の引数。
^
最初の引数 (1 と同じです)。
$
最後の引数。
%
?s? 検索と一致するワード
x-y
ワードの範囲。
-y
0-y と同じです。
*
^-$ と同じですが、イベントが 1 個のワードしか含んでいない場合には何も戻しません。
x*
x-$ と同じです。
x-
x* と同じですが、最後のワード ($) を省 略します。
選択されたワードは、単一ブランクで区切られてコマンド行に挿入されます。 例えば、前の例の diff コマンドは、diff !!:1.old !!:1 として入力された可能性があります (:1 を使用して前のイベントから最初の引数を選択する)、または diff !-2:2 !-2:1 として入力して、cp コマンドから引数を選択してスワップすることができます。 diff の順序を気にしないのであれば、diff !-2:1-2 または単純に diff !-2:* とすることができたかもしれません。 cp コマンドが cp wumpus.man !#:1.old に書き込まれている可能性があり、現在のイベントを参照するために # を使用します。!n:- hurkle.man は、nroff コマンドの最初の 2 つのワードを再使用して、nroff -man hurkle.man という名前を付けます。

引数セレクターが「^」「$」「*」「%」または「-」で始まる場合は、イベント指定をワード指定子から分離する : を省略できます。たとえば、diff コマンドは diff !!^.old !!^ または同等に diff !!$.old !!$ である可能性があります。しかし、もし !! は ! に省略されますと、- (ハイフン) で始まる引数セレクターはイベント指定として解釈されます。

ヒストリー参照はワード指定子を持つことができますが、イベント指定はなくてもかまいません。 その場合、ヒストリー参照は直前のコマンドを参照します。 上記の diff の例を引き続き用いるなら、このコマンドは簡単に diff !^.old !^ と することができます。あるいは引数を逆の順序で得るため には単に diff !* と入力することができます。

ヒストリー参照内のワード (1 つまたは複数) は、ワードの後に 1 つまたは複数の変更子 (それぞれの前に : (コロン) を付ける) を続けることによって編集または変更することができます。
h
末尾のパス名コンポーネントを除去し、先頭部分を残します。
t
先行するすべてのパス名コンポーネントを除去し、末尾のものだけを残します。
r
ファイル名拡張子 .xxx を除去し、ルート名を残します。
e
拡張子以外のものをすべて除去します。
u
最初の小文字を大文字に変換します。
l
最初の大文字を小文字に変換します。
s/l/r
rl に置き 換えます。l r と同様の単なるストリングであり、名前の一部が類似する ed コ マンドの場合のような正規表現ではありません。 任意の文字を区切り文字として「/」の代わりに使用できます。「\」を使用して、l および r 内の区切り文字を引用できます。 r 内の文字 & は、l で置き換えられます。\ は & も引用します。 l が空 ('''') の場合、直前の置換からの l または直前の ?s? イベント指定からの s が使用されます。 末尾の区切り文字の直後に改行が続いている場合には、末尾の区切り文字を 省略することができます。
&
直前の置換を繰り返します。
g
続く変更子を各ワードに 1 回適用します。
a
1 つの単語にできるだけ多くの回数、以下の修飾子を適用します。「a」と「g」を一緒に使用して、修飾子をグローバルに適用することができます。 現行の実装では、'a' 変更子と 's' 変更子を一緒に使用すると無限ル ープに入る可能性があります。 例えば、:as/f/ff/ は終了しません。 この動作は将来変更されるでしょう。
p
新しいコマンド行を出力しますが、実行はしません。
q
置換された文字を引用符で囲み、この後に置換が行われないようにし ます。
x
q と似ていますが、ブランク、タブおよび 改行の位置でワードに分割します。
変更子は、最初の変更可能なワードにのみ適用されます ('g' が使用されて いない場合)。 変更可能なワードがなければエラーになります。

たとえば、diff コマンドは diff wumpus.man.old !#^:r として記述され、:r を使用して同じ行 (!#^) の最初の引数から .old を削除している可能性があります。そこに echo hello と言ってから、echo !*:u で「hello」を大文字にしたり、echo !*:au で大声で言ったり、echo !*:agu で本当に叫んだりできます。 mail -s "I forgot my password" rot の 後に !:s/rot/root を続ければ、'root' のスペルが訂正され ます (別の方法については、スペル訂正機能を参照してください)。

代用語には特別な省略形があります。^は、入力行の最初の文字である場合、!:s^に相当します。したがって、前の例では、^rot^root につづりの訂正を行わせることができます。 明示的に ! で始まらないヒストリー置換子はこれしかありません。

csh だけでは、それぞれのヒストリーまたは変数展開に適用できる変更子 は 1 つだけです。 しかし tcsh では、複数の変更子を適用できます。以下に例を示します。
% mv wumpus.man /usr/man/man1/wumpus.1
% man !$:t:r
man wumpus
csh では、結果は wumpus.1:r になります。 コロンが後に続く置換子は、中括弧でコロンとは分離しなければならない場合 があります。
> mv a.out /usr/games/wumpus
> setenv PATH !$:h:$PATH
Bad ! modifier: $.
> setenv PATH !{-2$:h}:$PATH
setenv PATH /usr/games:/bin:/usr/bin:.
最初の試みは csh では成功するはずですが、tcsh では失敗します。tcsh は、2 番目のコロンの後に $ ではなく別の変更子を予期するためです。
最終的に、 ヒストリーには、エディターを使用しても、前述の置換を使用してもアクセスできます。 以下のコマンドは、ヒストリー・リスト内のイベントを検索し、イベントをまとめて入力 バッファーに取り込みます。
  • up-history
  • ヒストリーの下方移動
  • history-search-backward
  • history-search-forward
  • i-search-back
  • i-search-fwd
  • vi-search-back
  • vi-search-fwd
  • copy-prev-word
  • insert-last-word
toggle-literal-history エディター・コマンドは、入力バッファー内のヒストリー行の拡張形式とリテラル形式の間を切り替えます。expand-history および expand-line は、現在のワードおよび入力バッファー全体で、ヒストリー置換をそれぞれ展開します。

別名置換

シェルは、alias および unalias コマンドで設定、設定解除、および出力することができる別名のリストを保守します。 コマンド行が解析されて単純なコマンドに分割された 後 (コマンド実行を参照)、各コマンドの最初のワードが別名 を持っているかどうか、左から右の順に検査されます。 持っている場合には、最初のワードは別名に置換されます。 別名がヒストリー参照を含んでいる場合には、元のコマンドが直前の入力行にある かのようにヒストリー置換が行われます。 別名がヒストリー参照を含んでいない場合には、引数リストには手が加えられま せん。

したがって、ls の別名が ls -l である場合、コマン ド ls /usrls -l /usr となり、引数リストはここではそのままになっています。 lookup の別名が grep !^ /etc/passwd である場合には、lookup bill grep bill /etc/passwd となります。 別名は、パーサーのメタ構文をインストールするのに使用できます。 例えば、alias print 'pr &#xa5;!* | lpr' は、引数をライン・プリンターに出力する コマンド (print) を定義します。

別名置換は、その最初のワードが別名を持っていないコマンドを検出するまで 繰り返されます。 別名置換が (すぐ上の例のように) 最初のワードを変更しないような場合、ループを回避するためにフラグが付けられます。 その他のループが起きた場合には検出されて、エラーが発生します。

一部の別名はシェルが参照します。tcsh 組み込みコマンドを参照してくだ さい。

変数置換

tcsh シェルは、変数のリストを保守します。それぞれの変数は、値とし て 0 個以上のワードから成るリストを持っています。 tcsh シェル変数の値は、set および unset コマ ンドを使って表示したり、変更したりできます。 システムは独自の「環境」変数リストを保守しています。 それらの変数リストは、printenvsetenv およ び unsetenv を使って表示したり、変更したりできます。

変数は set -r を使って読み取り専用にすることができます。 読み取り専用変数は、変更したり、設定解除したりすることができませ ん。もしそうしようとすると、エラーが起こります。 変数をいったん読み取り専用にすると、書き込み可能にすることができなく なります。ですから set -r は注意して使用する必要があります。 環境変数は読み取り専用にすることはできません。

一部の変数は、tcsh シェルが設定したり、参照したりします。 例えば、argv 変数はシェルの引数リストのイメージであり、この変数の値のワードは特別な仕方で参照されます。 tcsh シェルが参照する変数のいくつかはトグルですが、シェルは トグルが設定されているかどうかを見るだけであり、どんな値であるかにつ いては注意しません。 例えば、verbose 変数は、コマンド入力がエコーされるようにするトグルです。 -v コマンド行オプションがこの変数を設定します。 特殊なシェル変数は、シェルが参照するすべての変数をリストします。

その他の操作では、変数を数値的に処理します。 @ (at) コマンドを使用すると、数値計算を実行でき、また その結果を変数に割り当てることができます。 しかし、変数の値は常に (0 個以上の) ストリングとして表現されます。 数値的な操作を行うという目的のため、ヌル・ストリングはゼロと みなされ、複数ワードからなる値の 2 番目以降のワードは無視されます。

入力行に別名が割り当てられて解析された後、各コマンドの実行に先立って、$ 文字で入力された変数置換が実行されます。 この展開は $ の前に ¥ を付 けることによって抑制することができますが、次のような例外があります。すなわち、二重引用符 (") で囲まれている場合には展開は常に行われ、単一引用符 ( ' ) で囲まれている場合には展開は絶対に行われません。 開き引用符または抑音符号 (`) を使って引用されたストリングは、後で 解釈されます (コマンド置換を参照)。このため、$ の置換は 行われるとしても、後でなければそこでは行われません。 ブランク、タブ、または行の終わりが後に続いている場合には、$ は未変更のまま渡されます。

入出力のリダイレクトは変数展開の前に認識され、そして別個に展開 されます。 それ以外の場合、コマンド名と引数リスト全体は一緒 に展開されます。 ですから、(ここまでの) 最初の (コマンド) ワードは複数のワードを生成することが 可能であり、その最初のワードがコマンド名になり、残りのワードが引数になります。

二重引用符 (") で囲まれていないか、あるいは :q 変更子が与えられて いない限り、変数置換の結果は最終的には置換されたコマンドとファ イル名になります。 " で囲まれている場合、複数のワードからなる値を持つ変数は、単一 ワード (の一部) に展開され、変数の値のワードはブランクで区切られます。 :q 変更子が置換に適用された場合、変数は複数のワードに展開されますが、それぞれのワードはブランクで区切られ、後でコマンドまたはファイル名置換が行われないように引用符で囲まれます。

変数の値をシェル入力に取り込むために、以下のようなメタシーケンスが用 意されています。 ただし、上に述べたように、設定されていない変数を 参照するとエラーになります。
$name[selector]
${name[selector]}
名前 (name) の値から選択したワードだけに置き換えます。 セレクター (selector) は $ 置換の対象となり、これは 1 個の番号、またはハイフン (-) で区切られた 2 個の番号からなっています。 変数の値の最初のワードには 1 の番号が付けられます。 範囲の最初の数が省略された場合、デフォルトは 1 になります。 範囲の最後のメンバーを省略すると、デフォルトは $#name です。 セレクター * はすべてのワードを選択します。 2 番目の引数が省略されるかまたは範囲内にある場合に、範囲が空であってもエラーにはなりません。
$0
コマンド入力の読み取り元になるファイルの名前に置き換えます。 名前が認識されていない場合には、エラーが起こります。
$number
${number}
$argv[number] と同等です。
$*
$argv と同等であり、$argv[*] とも同等です。
ヒストリー置換で説明されている : (コロン) 修飾子 (:p を除く) は、変数置換に適用できます。 複数の変更子を使用できます。 ヒストリー置換の場合と同様に、変数置換子を文字どおりの : と分離するた めに中括弧を付けなければならない場合があります。変更子はすべて中括弧の 中に指定しなければなりません。 以下の置換子は : 変更子で変更することはできません。
$?name
${?name}
name が設定されている場合はストリング 1 を置換し、設定されていない場合は 0 に置換します。
$0
コマンド入力の読み取り元になるファイルの名前に置き換えます。 名前が認識されていない場合には、エラーが起こります。
$?0
現行の入力ファイル名が認識されている場合には 1 に 置き換え、認識されていない場合には 0 に置き換えます。 対話式シェルでは常に 0 です。
$#name または ${#name}
name 内のワードの数に置き換えます。
$#
'$#argv' と同等です。
$%name
${%name}
name 内の文字の数に置き換えます。
$%number
${%number}
$argv[number] 内の文字の数に置き換えます。
$?
$status と同等です。
$$
(親) シェルの (10 進) プロセス番号に置き換えます。
$!
このシェルが開始した最後のバックグラウンド・プロセス の (10 進) プロセス番号に置き換えます。
$<
標準入力からの行に置き換え、これ以降は変換処理を行いません。 これは、シェル・スクリプトでキーボードから読み取る場合に使用できます。 csh では、$<:q と同等であるかのように常に引用符 $< を使用しますが、tcsh ではそのようにしません。 さらに、tcsh が行の入力を待っているときに、ユーザーは行が代わりに入れ られるシーケンスを中断するために割り込みを入力することができますが、csh ではこうしたことを行えません。
エディター・コマンド expand-variables (通常は、^X-$ にバインドされている) を使用すれば、個々の変数を 対話式に展開することができます。

これまでに述べた置換以外の置換は、tcsh 組み込みコマンドの引数に選択 的に適用されます。 つまり、式において評価されない部分については展開は行われません。 tcsh シェルの内部コマンドではないコマンドについては、コマンド名は別個に引数リストから置換が行われます。 これは、入出力リダイレクトが行われた後、メイン・シェルの子で 非常に遅く行われます。

コマンド置換

コマンド置換は、「'」で囲まれたコマンドによって示されます。このようなコマンドからの出力は、空白、タブ、改行で別々のワードに分割され、ヌルのワードは破棄されます。 その出力は、変数および置換されたコマンドであり、元のストリングの代わりに 挿入されます。

二重引用符 ( " ) の中のコマンド置換子はブランクとタブを保存しますが、改行だけは新しいワードを強制的に生成します。 最後の単一の改行は、どんな場合にも新しいワードを生成しません。 ですから、コマンド出力が完全な行であっても、コマンド置換によって ワードの一部しか生成されないことがあり得ます。

ファイル名の置換

ワードに「*」、「?」、「[」、または「{」のいずれかの文字が含まれている場合、または「~」という文字で始まる場合は、ファイル名置換の候補として認識されます (グロビングとも呼ばれます)。 そのワードはパターン (グロブ・パターン) と見なされ、そのパターンと一致するファイル名の英字順ソート・リストに置き換えられます。

一致するファイル名では、ファイル名の先頭または / (スラッシュ) の直後にある文字 . (ピリオド)、および文字 / は明示的に一致する必要があります。 文字 * は、ヌル・ストリングを含め、どのストリング とも一致します。 文字 ? は任意の単一文字に一致します。 シーケンス [...] は囲まれた文字のうちの任意のものと一 致します。 [...] 内の - で区切られた文字の対は、その 2 つの文字の間にある任意の文字と語句として一致します。

一部のグロブ・パターンは否定できます。 すなわち、シーケンス [^...] は、中括弧内の文字や文字範囲によって指定されていない任意の単一文字と一致します。

グロブ・パターン全体も ^ で否定することができます。
> echo *
bang crash crunch ouch
> echo ^cr*
bang ouch
「?」、「*」、または「[]」を使用しないグロブ・パターン、あるいは「{}」または「^」を使用するグロブ・パターンは正しく否定されません。
メタ表記 a{b,c,d}eabe ace ade の省略表現です。
  • 左から右への順序は保持されます。 つまり、/usr/source/s1/{oldls,ls}.c/usr/source/s1/oldls.c /usr/source/s1/ls.c に 展開されます。 マッチングの結果は、以下の例に示すように、この順序を維持して下位のレ ベルで別個にソートされます : ../{memo,*box} ../memo ../box ../mbox に展開されます。 ('memo' は '*box' のマッチングの結果と一緒にはソートされないことに注意 してください。) 存在しないファイルにこの構造が展開されてもエラーにはなりませんが、展開されたリストが渡されるコマンドからはエラーが出される可能性があります。 この構造はネストすることができます。 特別な場合として、ワード {, } および {} はそのまま渡されます。
  • ファイル名の先頭にある ~ はホーム・ディレクトリーを表します。 ~ が単独で指定された場合、これはホーム・シェル変数の値に示されている起動側のホーム・ディレクトリーに展開されます。 文字、数字、および - (ハイフン) で構成される名前が後に続いている場合、シェルはその名前を持つユーザーを検索し、そのホーム・ディレクトリーに置き換えます。ですから ~ken は、/usr/ken に展開され、 ~ken/chmach/usr/ken/chmach のように 展開されます。
  • 文字 ~ は、その後に英字以外の文字や / が続いている場合、あるいはワードの先頭以外の場所に現れている場合、そのまま残されます。 ですから、setenv MANPATH /usr/man:/usr/local/man: ~/lib/man のようなコマンドでは、ホーム・ディレクトリーには 置換されないことに注意してください。 '*'、'?'、, '['、または '~' を含んでいるグロブ・パターンは、'^' があってもなくても、いずれのファイルとも一致しなければ エラーになります。 しかし、グロブ・パターンのリスト内の 1 つのパターンだけはあるファイルと一致するはずです (ですから、例えば rm *.a *.c *.o が失敗するのは '.a'、'.c'、または '.o' で終わっている現行ディレクトリー内にファイルが何もない場合だけです)。また、nonomatch シェル変数が設定されていると、どれとも一致しないパターン (またはパターンのリスト) は、エラーにならずに未変更のまま残されます。

noglob シェル変数を設定すると、ファイル名置換を 抑制することができます。また expand-glob エデ ィター・コマンド (通常は ^X-* にバインドされている) を使用する と、個々のファイル名置換を対話式に展開することができます。

ディレクトリー・スタック置換

ディレクトリー・スタックは、tcshの pushdpopd、および dirs 組み込みコマンドによって使用される、ゼロから番号が付けられたディレクトリーのリストです。dirs は、いつでもディレクトリー・スタックを印刷、保管、復元、および消去することができます。 また savedirs および dirsfile シェル変数を設定すれば、ログアウト時にディレクトリー・スタックが自動的に保管されたり、ログオン時にそれが復元されるようにすることができます。 dirstack シェル変数を調べればディレクトリー ・スタックを見ることができ、またこのシェル変数を設定すれば任意のディ レクトリーをディレクトリー・スタックに入れることができます。

1 個以上の数字が後に続いている = (等号) は、ディレクトリー・スタック 内の項目に展開されます。 特殊文字 =- はスタック内の最後のディレクトリ ーに展開されます。 以下に例を示します。
    > dirs -v
    0 /usr/bin
    1 /usr/spool/uucp
    2 /usr/accts/sys
    > echo =1
    /usr/spool/uucp
    > echo =0/calendar
    /usr/bin/calendar
    > echo =-
    /usr/accts/sys
noglob および nonomatch シェル変数と expand-glob エディター・コマ ンドは、ファイル名置換だけでなくディレクトリー・スタックにも適用 されます。

その他の置換

ファイル名に関連する変換はいくつかありますが、ディレクトリー・スタック置換に厳密には関連していませんが、完全性のためにここでは示します。 symlinks 変数が expand に設定されていれば、どんなファイル名でも絶対パスに展開できます。 引用符で囲むとこの展開が抑制され、要求があると、normalize-path エディター・ コマンドは展開を行います。 normalize-command エディター・コマンドは、要求があると PATH 内のコマンドを絶対パスに展開します。 最後の点として、cd および pushd は - (ハイフン) を 古い作業ディレクトリーとして解釈します (owd シェル変数と同等です)。 これは置換ではなく、これらのコマンドだけが認識する省略形です。 それでも、引用符で囲むとこれも抑制することができます。

コマンド実行

続く 3 つのトピックでは、シェルがコマンドを実行する方法を説明し、その入出力について扱います。

組み込みおよび非組み込みコマンドの実行

tcsh の組み込みコマンドは、シェル内で実行されます。 パイプラインの最後のコンポーネント以外のいずれかのコンポーネントが組み込みコマン ドである場合、そのパイプラインはサブシェル内で実行されます。

括弧で囲まれたコマンドは常にサブシェル内で実行されます。例えば、コマンド
(cd; pwd); pwd
は、ホーム・ディレクトリーを出力し、ユーザーは自分のい た場所にそのまま残されます (ホーム・ディレクトリーの後この ディレクトリーを出力します)。一方、
cd; pwd
は、ユーザーをホーム・ディレクトリーに残します。 括弧付きのコマンドは、cd が現行シェルに影響を与えないように するために非常に頻繁に使用されます。

実行するコマンドが組み込みコマンドでないことが分かると、tcsh シェルは execve によってそのコマンドを実行 しようとします。 可変パス内の各ワードは、tcsh シェルがコマンドを探すディレクトリー を指定します。 -c オプションも -t オプションも指定されていない場合、シェルはこれらのディレクトリー内の名前を内部表にハッシュし、そのコマンドが存在する可能性がある場合にのみディレクトリー内で execve を試すことができます。 検索パス内に非常に多くのディレクトリーがある場合には、これによりコマ ンドを探し出すスピードが大幅に速くなります。 このメカニズムが (unhashを介して) オフになっている場合は、シェルが -c または -t 引数を指定されているか、または / で始まっていないパスの各ディレクトリー・コンポーネントについて、シェルが現行作業ディレクトリーを指定されたコマンド名で連結し、そのコマンドが実行しようとするファイルのパス名を形成します。

ファイルが実行許可を持っていても、システムに対して実行可能なファイル ではない場合 (すなわち、それが実行可能なバイナリーでも、そのインタ ープリターを指定しているスクリプトでもない場合)、それは、シェル・コマンドを含んでいるファイルであると想定され、それを 読み取るために新しいシェルが spawn されます。 shell 特殊別名を設定して、シェルそのもの以外の インタープリターを指定することもできます。

入力あるいは出力

tcsh シェルの標準入出力構文をリストする表については、z/OS UNIX システム・サービス・コマンド解説書の tcsh コマンドを参照してください。

コマンドは、シェルが起動された環境を受け取りますが、その環境は 入出力パラメーターにより、またパイプラインに含まれていたその コマンドにより変更されたものです。 ですから、以前の一部のシェルとは異なり、シェル・コマンドのファイルか ら実行されるコマンドは、デフォルトではコマンドのテキストを使用できませ ん。コマンドはシェルの元の標準入力を受け取ります。 インライン・データを提供するには << メカニズムを使用して ください。 これを使用すると、シェル・コマンド・スクリプトはパイプライ ンのコンポーネントとして機能できるようになり、シェルは入力のブロック 読み取りを行うことができます。 切り離して実行されるコマンドのデフォルト標準入力は、空ファイル /dev/null ではなく、シェルの元の標準入力です。 その標準入力が端末であり、プロセスがその端末から読み取ろうとする 場合、プロセスはデータをブロック形式で記録し、そのことがユーザーに通知 されます (ジョブを参照)。

診断出力は、標準出力と一緒にパイプを介して送ることができます。 単なる | ではなく、|& 形式を使用するだけで行うことができます。

現在のところ、シェルは標準出力もリダイレクトしなければ、診断出力をリ ダイレクトすることはできません。しかし、(command > output-file) >& error-file はしばしばその抜け道として 受け入れられています。 出力を端末に送るには、output-file または error-file のいずれか を /dev/tty にすることができます。

機能

シェルがどのようにコマンド行を受け入れて、解析し、実行するかにつ いて説明してきましたが、次に種々の便利な機能に目を向けてみましょう。

制御フロー

tcsh シェルは、コマンド・ファイル (シェル・スクリプト) 内の、また端末出力からの (役立つ仕方で制限された) 制御の流れを調整するのに使用できるいくつかのコマンドを含んでいます。 それらのコマンドはすべて、シェルに強制的にその入力の中で再読み取り またはスキップさせたり、実装のために一部のコマンドの配置を制限 させることにより、動作します。

foreach ステートメント、switch ステートメント、および while ステートメント、ならびに if ステートメント の if-then-else ステートメントでは、入力行の単一の単純コマンドの中に主要なキーワ ードを指定する必要があります。

シェルの入力が検出できない場合、シェルはループが読み取られるときには いつでも入力をバッファーに入れ、この内部バッファー内で検出を実行して、ループが示唆する再読み取りを実行します。 (これが可能な範囲内では、逆方向 goto は検出不能入力に対して成功しま す。)

ifwhile、および exit の各組み込み コマンドは共通構文を持つ式を使用します。 この式には、続く 3 つのトピックで説明しているどの演算子でも含め ることができます。 @ 組み込みコマンドは独自の別個の構文を持っていることに注意 してください。

論理演算子、算術演算子、および比較演算子

以下の演算子は C の演算子と似ており、同じ優先順位を有しています。 それらは次のものです。
|| && | ^ & == !=  =~  !~  <=  >=
< > << >>  + - * / % ! ~ (  )
ここで優先順位は右に行くほど高くなります。 '==' '!=' '=~' および '!~' '<=' '>=' '<' および '>' '<<' および '>>' '+' および '-' '*' / および '%' は同じレベルのグループです。 '==' '!=' '=~' および '!~' 演算子はそれぞれの引数をストリング として比較し、その他の演算子は数字に対して演算を行います。 演算子 '=~' および '!~' は '!=' および '==' と似てい ますが、右側がグロブ・パターン (ファイル名の置換を参照) であり、左側のオペランドがそれとマッチングさせられるという点で違っています。 実際に必要なことがパターン・マッチングだけである場合には、これにより、シェル・スクリプトの中で switch 組み込みコ マンドを使用する必要性が少なくなります。

0 で始まるストリングは 8 進数と見なされます。 ヌルまたは欠落している引数は 0 と見なされます。 すべての式の結果はストリングであり、これは 10 進数を表します。 同じワードの中に 式の 2 つのコンポーネントがあってはなりません。 ただし、それらのコンポーネントが、パーサーにとって構文上重要となる式のコンポーネント ('$' '|' '<' '>' '(' ')') に隣接している場合を除きます。 その場合は、それらのコンポーネントをスペースで囲む必要があります。

コマンド出口状況

コマンドは、中括弧 ({}) で囲んで、式の中で実行することができ、その終了状況を戻すことによって実行できます。中括弧は、コマンドのワードからスペースで分離する必要があります。 コマンドが状況 0 で終了した場合には、コマンドの実行は正常 に行われ、真 (すなわち 1) が戻され、それ以外の状況である 場合にはコマンドの実行は失敗し、偽 (0) が戻されます。 もっと詳しい状況情報が必要な場合には、コマンドを式の外側で実行し、status シェル変数を調べる必要があります。

ファイル照会演算子

これらの演算子の一部は、ファイルおよび関連オブジェクトに対して 真/偽テストを実行します。 それらは -op file 形式であり、ここで op は次のいず れかです。
ac
タイプ c の拡張 ACL が存在しています。 文字 c は、ACL のタイプを表します。
a
アクセス ACL
d
ディレクトリーのデフォルト ACL
f
ファイルのデフォルト ACL
サブオプション d および f によるテストは、ファイルについては常に偽を戻します (ファイルにはデフォルトの ACL がありません)。
r
読み取りアクセス (セキュリティー製品および実効 ID によって決定される)
w
書き込みアクセス (セキュリティー製品および実効 ID によって決定される)
x
実行アクセス (セキュリティー製品および実効 ID によって決定される)
X
パス内の実行可能ファイルまたはシェル組み込みコマンド。 例えば、-X ls および -X ls-F は一般的には真ですが、-X /bin/ls は真では ありません。 (これは、セキュリティー製品および実効 ID によって決定されます。)
e
存在
Ea
ファイルが APF 拡張属性を持っている
Ep
ファイルがプログラムを持っている
Es
ファイルが共用アドレス・スペース拡張属性を持っている
El
ファイルが共用ライブラリー拡張属性を持っている
o
所有権
x
ゼロのサイズ
s
非ゼロ・サイズ
f
プレーン・ファイル
d
ディレクトリー
l
シンボリック・リンク
b
ブロック・スペシャル・ファイル
c
文字特殊ファイル
p
名前付きパイプ (FIFO)
S
ソケット・スペシャル・ファイル
u
セット・ユーザー ID ビットが設定されている
g
セット・グループ ID ビットが設定されている
k
スティッキー・ビットが設定されている
t
t file_descriptor (これは数字でなければ なりません) は端末デバイス用のオープン・ファイル・ディスクリプターです。
L
複数演算子テスト内の後続の演算子を、シンボリック・リンクに適 用します。そのリンクが指し示すファイルには適用しません。
file がコマンドおよびファイル名展開され、その後、実ユーザーとの 間に指定された関係をそれが持っているかどうかテストされます。 file が存在しないか、あるいはアクセス不能である場合、あるい は * で示された演算子については、指定されたファイル・タイプが現行 システムに存在しない場合、すべての照会は偽 (0) を戻します。

これらの演算子は、簡潔にするため組み合わせることができます。-xy file は、-x file && -y fileと同等です。 例えば、-fx はプレーン実行可能ファイルについては真です (1 を戻します) が、 ディレクトリーについては真ではありません。

L は、複数演算子テストで使用して、後続の演算子をシンボリック・ リンク (リンクが指し示すファイルではなく) に適用することができます。 例えば、-lLo は、 呼び出し側のユーザーが所有するリンクについては真です。 LrLw、および Lx はリンクについては常に真であり、リンク以外については偽です。 L は、複数演算子テストの中の最後の演算子であるときには、別 の意味を持ちます。

file がファイルであることを予期する演算子を、そのように予期しない演算 子と組み合わせること (例えば、Xt) は可能ですが、実用的 ではありません。むしろ、場合によっては誤った結果にいたることがあります。 L の後に非ファイル演算子を続けると、特に予想外の結果になることが あります。

その他の演算子は他の情報を戻します。すなわち、0 で も 1 でもありません。 それらの形式は前のものと同じであり、op は以下の選択項目のいずれかです。
A
最後のファイルのアクセス時刻 (エポックから経過した秒数)。
A:
A と似ていますが、タイム・スタンプ形式です。すなわち、'Fri May 14 16:36:10 1993' です。
M
最後のファイルの変更時刻。
M:
M と似ていますが、タイム・スタンプ形式であるという点が異なっています。
C
最後の i ノードの変更時刻。
C:
C と似ていますが、タイム・スタンプ形式であるという点が異なっています。
D
装置番号。
I
i ノード番号。
F
複合ファイル ID (形式は device : inode)。
L
シンボリック・リンクが指し示すファイルの名前。
N
(ハード) リンクの数。
P
先行ゼロなしの許可 (8 進数)。
P:
P と似ていますが、先行ゼロが付きます。
P mode
-P mode & ファイルに相当します。つまり、-P22 ファイルは、ファイルがグループと他によって書き込み可能な場合は 22、グループのみによる場合は 20、また、どちらでもない場合は 0 を戻します。
P mode:
P mode と似ていますが、先行ゼロが付きます。
U
数値ユーザー ID。
U:
ユーザー名、またはユーザー名が不明の場合は数値ユーザー ID。
G
数値グループ ID。
G:
グループ名、または数値グループ ID (グループ名が不明の場合)。
Z
サイズ (バイト単位)。
m file
存在する場合、ファイルのセキュリティー・ラベルを返します。 ない場合は、偽を戻します。
複数演算子テストの中では上記の演算子のうちの 1 つしか指定することができず、それは最後に指定する必要があります。 L は、複数演算子テストの中の最後およびいずれの場所でも、別の意味を持ちます。 上記の演算子の多くについて 0 が有効な戻り値なので、失敗し た場合にはそれらの演算子は 0 を戻しません。失敗した場合、ほとんど は -1 を戻し、F は : (コロン) を戻します。

ファイル照会演算子は、filetest 組み込みコマンドでも評価する ことができます。

ファイル・タグおよび Filetest 組み込みコマンドで使用するファイル照会演算子

-B file
  • そのファイルがバイナリーとしてタグ付けされている場合、真。
  • そのファイルがタグ付けされていない場合、あるいはテキストとしてタグ付けされている場合、偽。
  • そのファイルがテキスト/バイナリーの混在としてタグ付けされている場合 (すなわち 、txtflag = OFF でコード・セットがファイル・タグに格納されている)、コード・セットが戻される。
-T file
  • そのファイルがタグ付けされていない場合、あるいは txtflag = OFF としてタグ付けされている場合、偽。
  • そのファイルがテキストとしてタグ付けされている場合、コード・セットが戻される。
-B file または -T file のどちらを使用しても、そのファイルが指定したようにタグ付けされている場合、tcsh の「if テスト」により真と 評価されます。 この 2 つの演算子を使用すると、tcsh では特定のコード・セットに対するテストも行えるようになります。 以下に例を示します。
if ( -T file == IBM-1047 )  #True if tagged as IBM-1047 text
if ( -B file )              #True if tagged as binary
注: ファイル問い合わせオペレーターが、テスト中のコード・セットの別名を戻すことがあるため、相互の別名であるコード・セットが存在し、そのためにテストが失敗する場合があります。

ジョブ

シェルはジョブを各パイプラインと関連付けます。 シェルは、現行ジョブのテーブル (jobs コマンドで出力される) を 保持し、ジョブに短整数番号を割り当てます。 ジョブが & (アンパーサンド) によって非同期的に開始された場合、シェルは次のような行を出力します。
[1] 1234
これは、非同期的に開始されたジョブがジョブ番号 1 であり、1 つの (最上位) プロセスを持っていて、そのプロセス ID が 1234 であったことを示します。

あるジョブを実行していて、何かほかのことを実行したい場合には、延期キー (通常は ^Z) を押すことができます。それによって、STOP シグナルが現行ジョブに送られます。 次にシェルは、通常、ジョブが「延期」されたことを示し、別のプロンプトを出力します。 listjobs シェル変数が設定されてい る場合、jobs 組み込みコマンドの場合のようにすべてのジョブが リストされます。その変数が 'long' に設定されている場合には、jobs -l の場合のようにリストは長形式になります。 その後、ユーザーは延期されたジョブの状態を操作することができます。 bg コマンドでジョブをバックグラウンドに移したり、ほかのいく つかのコマンドを実行してから最終的には fg でそのジョブをフォ アグラウンドに戻したりすることができます (run-fg-editor エディター・コマンドも参照)。 ^Z は即時に有効になります。これは、入力されると保留出力および 読み取られていない入力が廃棄されるという点で割り込みと似ています。 wait 組み込みコマンドを使用すると、シェルはすべてのバッ クグラウンド・ジョブが完了するのを待機することになります。

^] キーは遅延延期シグナルを現行ジョブに送りますが、このシグナル はプログラムがそれを読み取ろうとするまで STOP シグナルを生成しません。 通常、これは、あるジョブ用にいくつかのコマンドを準備したとき、前もっ て入力することができます。これは、そのジョブがコマンドを読み取った後 にそのジョブを停止したい場合に入力します。 csh では ^Y キーがこの機能を実行しますが、tcsh では ^Y は 編集コマンドです。

バックグラウンドで実行されているジョブは、端末から読み取ろうとすると 停止してしまいます。 バックグラウンド・ジョブは通常、出力を生成することができますが、これはコマンド stty tostop で使用不可にすることができます。 stty オプションを設定した場合、バックグラウンド・ジョブは、出力を生成しようとすると停止してしまいます。これはジョブが入力を読み取ろうとした場合に停止するのと同様です。

シェル内でジョブを参照する方法はいくつかあります。 文字 % はジョブ名を取り込みます。 ジョブ番号 1 を参照する場合は、%1 として名前を付けることができます。 ジョブに名前を付けるだけで、ジョブがフォアグラウンドに表示されます。したがって、%' は fg %1 の同義語であり、ジョブ 1 をフォアグラウンドに戻します。 同様に、%1 & は、bg %1 のように、バックグラウンドでジョブ 1 を再開します。 入力するストリングにあいまいな接頭部を指定してジョブを開始することもできます。例えば、%ex は中断状態の ex ジョブを再開します (ストリング 'ex' で始まる名前を持つ中断状態のジョブが 1 つしかない場合)。 このようなジョブが 1 つしかない場合、%? ストリングは、テキストにストリングが含まれるジョブを指定することもできます。

シェルは現行ジョブと直前のジョブを覚えています。 ジョブに関連した出力では、現行ジョブには + (正符号) のマークが付けられ、直前のジョブには - (ハイフン) のマークが付けられます。 省略形 %+、%、および (ヒストリー・メカニズムの構文との類推で) %% はす べて現行ジョブを示し、%- は直前のジョブを示します。

ジョブ制御機構では、一部のシステムにおいて stty のオプション new を設定する必要があります。 これは tty ドライバーの新しい (new) 実装の成果物であり、これを使用すると、キーボードから割り込み文字を生成してジョブに停止するよう命令することができます。 新しい tty ドライバーのオプションの設定についての詳細は、stty および setty tcsh 組み込みコマンドを参照してください。

状況報告書

tcsh シェルは、プロセスが状況を変更すると即時にそれを認知します。 通常、シェルは、ジョブが妨害されて、処理を進めることができなく なった場合にユーザーに知らせますが、それはプロンプトを出力するほんの 直前です。 これは、ユーザーの作業が妨げられないようにするためです。 しかし、notify シェル変数を設定して おくと、シェルはバックグラウンド・ジョブの状況の変更を即時にユーザーに 通知します。 単一プロセスの状況変更が即時に報告されるようにそれにマークを付ける シェル・コマンド notify もあります。 デフォルトでは、notify は現行プロセスにマークを付けます。バックグラウンド・ジョブを開始した後に 'notify' と指定するだけで、それにマークを付けることができます。

ジョブが停止しているときにシェルを終了しようとすると、'You have stopped jobs' という警告が出されます。 jobs コマンドを使用すれば、それらのジョブを知ることができます。 このコマンドを使用するか、あるいは即時にもう一度終了しようとすると、シェルは 2 回目の警告は出さず、延期されていたジョブは終了します。

自動イベント、定期的イベント、および時間指定イベント

シェルのライフ・サイクルの中で、いろいろな時間に 自動的にコマンドを実行して他のアクションを実行するさまざまな方法があ ります。

  • sched 組み込みコマンドで、スケジュール・イベント・リス トにコマンドを書き込むと、それは指定の時刻にシェルによって実行されます。
  • beepcmdcwdcmdperiodic およ び precmd 特殊別名を設定すると、シェルがベルを鳴らしたと き、作業ディレクトリーが変更されたとき、t-period 分ごと、および各プロ ンプトが出される前にそれぞれコマンドを実行することができます。
  • autologout シェル変数を設定すると、未活動の状態がある一定分数経過した後、シェルをログアウトすることが できます。
  • mail シェル変数を設定すると、新しいメールが届いていないかどうか定期的に確認することができます。
  • printexitvalue シェル変数を設定すると、ゼロ以外の状況で終了したコマンドの出口状況を出力することができます。
  • rmstar シェル変数を設定すると、ユーザーが rm * を入力した場合に、そのコマンドを本当に実行したい のかをユーザーに尋ねるようにすることができます。
  • time シェル変数を設定すると、一定秒数を超える CPU 時間を要したプロセスが完了した後、time 組み込みコマンドを実行することができます。
  • watch および who シェ ル変数を設定すると、選択したユーザーがいつログインまたはログアウトし たかを報告させることができ、また log 組み込みコマンドを使用 すると、いつでもそれらのユーザーについての報告が行われます。

各国語システム報告書

システムの多文化サポートを使用すると、setlocale 関数が呼び出されて、該当する文字種別とソートが判別されます。 この関数は、通常は LANG および LC_CTYPE 環境変数を調べます。詳細は、システムの資料を参照してください。

不明の文字 (出力可能でも制御文字でもない文字) は ¥nnn 形式で出力されます。

version シェル変数は、シェルのコンパイル時に選択されたオプションを示 します。 newgrp 組み込みコマンドおよび echo_style シェル変数、そしてシェルの入力ファイルの場所 (tcsh ファイルを参照) にも注意してください。

制約事項: tcsh シェルは 3 つのロケールをサポートしていません。 サポートしていないロケールは、IBM-1388 (中国語)、IBM-933 (韓国語)、および IBM-937 (中国語 (繁体字)) です。

処理シグナル

ログイン・シェルは、ファイル ~/.logout. を読み取るときには割り込みを無視します。 シェルは、-q 付きで開始されていない限り、終了 (quit) シグナル を無視します。 ログイン・シェルは終了 (terminate) シグナルを取り込みますが、非ログイン・ シェルは自分の親から終了動作を継承します。 その他のシグナルは、シェルがその親から継承した値を持ちます。

シェル・スクリプトでは、シェルによる割り込みシグナルおよび 終了 (terminate) シグナルの処理は onintr で制御することができ、ハングアップの処理は hup および nohup で制御する ことができます。

ハングアップ時にはシェルは終了します (logout シェル変数も参照)。 デフォルトでは、シェルの子も実行されますが、シェルは終了時にハングアップを送信しません。hup は、終了時にシェルがハングアップを子に送信するように配置し、nohup はハングアップを無視するように子を設定します。

管理端末

シェルは editquoteexecute という 3 種類の端末 (tty) モードを使用 します。edit は編集時に使用され、quote はリテラル文字を引用するときに使用され、execute はコマンドの実行時に使用されます。 シェルは各モードのいくつかの設定値を一定に保つので、tty を一致しない状態のままにして残すコマンドでもシェルを妨害しません。 シェルは、tty のスピードや埋め込みの変更とも調和します。 一定に保たれる tty モードのリストは、組み込み setty で 調べたり、変更したりできます。 エディターは CBREAK モード (またはそれに相当するもの) を使用しますが、それでも先行入力文字をとります。

echotcsettc および telltc コマンドを使用 すると、コマンド行から端末機能を操作およびデバッグすることができます。

tcsh シェルはウィンドウのサイズ変更に自動的に順応し、環境変数 LINES および COLUMNS が設定されている場合にはそれらを調整します。

tcsh 組み込みコマンド

以下の表に、tcsh組み込みコマンドを示します。これらは /bin/sh 組み込みコマンドではありません。

その他の tcsh 組み込みコマンドも、z/OS シェルにあります。 場合によっては、それらは機能が異なることがあります。 tcsh バージョンのコマンドの解説については、各コマンドの説明 を参照してください。

tcsh シェルには、組み込みコマンドだけでなく、一連の特殊別名があります。
  • beepcmd
  • cwdcmd
  • periodic
  • precmd
  • shell
これらの別名のそれぞれは、設定されている場合には、指示された時刻に 自動的に実行されます。 初期設定では、これらの別名は定義されていません。 別名についての詳細は、 別名置換を参照してください。
上記の別名の説明を以下に示します。
beepcmd
シェルが端末ベルを鳴らすときに実行されます。
cwdcmd
作業ディレクトリーの変更のたびに実行されます。 例えば、ユーザーが xterm および twm のようなタイトル・バーをサポートするウィンドウ・ マネージャーに親変更したものを使用する X Window システム上で作業しており、以下のコマンド
> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd ^G"'
を実行した場合、シェルは、実行中の xterm のタイトルをホストの名前、コロン、および 絶対パス名で表された現行作業ディレクトリーになるように変更します。 これを行うもっと凝った方法は次のようなものです。
> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"'
この場合、 ホスト名と作業ディレクトリーはタイトル・バーに表示されますが、ホスト名のみはアイコン・マネージャー・メニューに表示されます。 cd、pushd または popd cwdcmd に入れると、無限ループに入る可能性があります。
periodic
tperiod 分ごとに実行されます。 これは、新規メールなどのように、よくあるが頻繁でない変更を検査するのに便利な方法です。 例えば、次のコマンドを実行すると、
        > set tperiod = 30
        > alias periodic checknews
checknews プログラムが 30 分ごとに実行されます。 periodic が設定されていても tperiod が設定されていない場合または 0 に設定されている場合、periodicprecmd と同じように働きます。
precmd
それぞれのプロンプトが出力される直前に実行されます。 例えば、次のコマンドを実行すると、
> alias precmd date
date は、シェルが各コマンドの入力を促す直前に実 行されます。 precmd を設定して何を行うことができるかについて 制限はありませんが、判断力を働かせる必要があります。
シェル
自分ではインタープリターを指定しない実行可能スクリプト用にインタープリターを指定します。 最初のワードは、インタープリターの絶対パス名でなければなりま せん。 例えば、/bin/tcsh また は /usr/local/bin/tcsh (デフォルトでは、これは /bin/tcsh に設定されます)。

プログラミング構成

構成 アクション
breaksw switch から break が出され、endsw の後 再開されます。
case label switch 内のラベル。 switch の説明を参照してください。
continue 最も近い while または foreach ループの 実行を継続します。 現在行の残りのコマンドが実行されます。
default switch ステートメントの中のデフォルト case にラベルを付けます。 これは、すべての case ラベルの後にくる必要があります。
else

end

endif

endsw
この後に示されている foreach、if、switch、およ び while ステートメントの説明を参照してください。
goto word goto では、word はファイル名およびコマンドであり、置換されて形式 label のストリングになります。 tcsh シェルは可能な限りその入力の前の部分に戻り、形式 label (おそ らくブランクまたはタブがその前にある) の行を探し、その行の後から実行を 継続します。
foreach

...
end
変数名をワード・リストの各メンバーに逐次設定してゆき、このコマンドとこれに対応する end との間にある一連のコマンドを実行します。 (foreach と end はどちらも単独で別々の行に指定する必要があります。) 組み込みコマンド continue を使用すればループを早めに続行でき 、組み込みコマンド break を使用すればループを早めに終了する ことができます。 このコマンドが端末から読み取られると、ループは、ループ内のステートメントが実行される前に、foreach? (または prompt2) でプロンプトが出されると、一度読み取られます。 端末でループの中の項目をタイプミスをした場合には、それを取り消すことが できます。
if (expr) then

...
else if
(expr2) then

...
else
...
endif
指定された expr が真である場合、最初の else の コマンドが実行されます。そうではなく、expr2 が真である場合に は、2 番目の else のコマンドが実行されます。 else-if の対はいくらでも指定できますが、必要な endif は 1 つだけです。 else 部分はオプショナルです。 (ワード else および endif は入力行の先頭に指定しな ければなりません。if はその入力行に、または else の 後に、単独で指定する必要があります。)
switch (string)

case str1:

...
breaksw
...
デフォルト...
breaksw
endsw
それぞれの case ラベルは、展開される最初のコマンドおよびファイル名で ある指定された string と順次にマッチングされます。 ファイルのメタキャラクター * , ? および [...] は、可変展開される case ラベルで使用できます。 default ラベルが検出される前にいずれのラベルも一致しない 場合には、実行は default ラベルの後から開始されます。 それぞれの case ラベルおよび default ラベルは、行の 先頭に指定する必要があります。 コマンド breaksw により、endsw の後実行が継続されます。 それ以外の場合、C のように case ラベルとデフォルト・ラベルを介して制御が低下する可能性があります。 ラベルが一致せず、デフォルトが存在しない場合、endswの後で実行が継続されます。
while (expr)

...
end
expr (式) がゼロ以外を評価している間、while とこれに対応する end の間でコマンドを実行します。whileend は、入力行に単独で表示される必要があります。breakcontinue を使用して、ループを途中で終了または続行できます。 入力が端末からの場合には、foreach の場合のように最初にループ に入るときにユーザーは入力を促されます。

tcsh のシェル変数と環境変数

ここで説明する変数は、tcsh シェルにとって特別な意味があります。 tcsh シェルは、開始時に addsuffixargvautologoutcommandecho_styleeditgidgrouphomeloginshpathpromptprompt2prompt3shellshlvltcshtermttyuiduser、およ び version を設定します。 これらは、ユーザーが変更しない限り、これ以降変更されません。 tcsh シェルは、必要に応じて cwddirstackowd、および status を更新し、ログアウト時 に logout を設定します。

シェルは、grouphome pathshlvlterm、および user を同じ名前の環境変数と一致させます。環境変数が変更されると、シェルは (シェル変数が読み取り専用でない限り) 必ず対応するシェル変数を変更して一致させます。逆の場合も同様です。 cwd と PWD は同じ意味を持っていますが、このような仕方では一致させられません。

シェルは、path および PATH の異なる形式を自動的に相互変換します。

表 1. tcsh 組み込みシェル変数
変数 目的
addsuffix この変数を設定した場合、ファイル名補完機能によって / がディレクトリーの末尾に、またス ペースを通常ファイルの末尾に追加されます。
ampm この変数を使用すると、ユーザーは tcsh プロンプト内の時刻形式を変更で きます。 特に ampm はユーザー・プロンプト内の %T および %P 書式設定シーケンスを変更します。 これを設定すると、すべての時刻が 12 時間 AM/PM 形式で示されます。
argv シェルの引数です。 定位置パラメーターは argv から取られます。 例えば、$1 は $argv に置き換えられます。 デフォルトで設定されます が、通常は対話式シェルでは空です。
autocorrect この変数を設定した場合、補完機能のたびにそれに先立って spell-word エディター・コマンドが自動的に起動されます (この変数は実装されていません)。
autoexpand この変数を設定した場合、補完機能が試みられるたびにそれに先立って、expand-history エディター・コマンドが自動的に 起動されます。
autolist この変数を設定した場合、補完機能で確定できなかったときは、候補がリストされ ます。 ambiguous に設定した場合、候補がリストされるのは、補完機能によって新しい文字が追加されなかった ときだけです。
autologout 自動ログアウトされるまでの未活動の状態の時間 (分数) に設定します。 自動ロックは、z/OS プラットフォーム上でサポートされない機能です。 (自動ロック用になるよう意図して) autologout 文 に 2 番目のパラメーターを指定した場合、このパラメーター は autologout に割り当てられます。 シェルは、自動的にログアウトするとき、autologout を出力し、変数 logout を automatic に設定して終了します。 ログイン・シェルおよびスーパーユーザー・シェルでは、デフォルトでは 60 (60 分後に自動ログアウト) に設定されますが、ウィンドウ・システムのもとでシェルが実行されている (DISPLAY 環境変数 が設定されている) とみなされる場合、あるいは tty が疑似 tty (pty) である 場合には、設定されません。 logout シェル変数も参 照してください。
backslash_ quote この変数を設定した場合、円記号 (¥) は常に ¥、' (単一引用符) お よび " (二重引用符) をエスケープします。 この設定により、複雑なエスケープを簡単にすることがで きますが、csh スクリプトでは構文エラーが発生する可能性があります。
cdpath サブディレクトリーが現行ディレクトリーにない場合に、cd がサ ブディレクトリーを探すディレクトリーのリスト。
command 設定した場合、-c フラグを付けてシェルに渡されたコマンド。
complete enhance に設定されている場合、completion は最初に大文字と小文字を無視し、次にピリオド、ハイフン、および下線 (「.」、「-」、および「_」) をワード区切り文字、ハイフン、およびアンダースコアーに相当するものと見なします。
correct cmd に設定した場合、コマンドは自動的にスペル 訂正が行われます。 complete に設定した場合、コマンドは自動的に 補完されます。 all に設定した場合、コマンド行全体が訂正されます。
cwd 現行ディレクトリーの絶対パス名。 dirstack およ び owd シェル変数も参照してください。
dextract この変数を設定した場合、pushd +nn 番目のディレクトリーを、ディレクトリー・スタックの最上部に回すのでは なく、そこから抽出します。
dirsfile dirs -S および dirs -L がヒストリー・ファイルを探す デフォルトの場所。 設定しなかった場合は、 ~/.cshdirs が使用されます。 通常は、 ~/.cshdirs の前 に ~/.tcshrc だけが検索場所になるので、dirsfile は ~/.login ではなく ~/.tcshrc の 中に設定する必要があります。
次に例を示します。
set dirsfile = ~/.cshdirs
dirstack ディレクトリー・スタック上のすべてのディレクトリーの配列。$dirstack[1] は、現行作業ディレクトリー、$dirstack[2] はスタック上の最初のディレクトリーなどです。 現行作業ディレクトリーは $dirstack[1] ですが、ディレクトリー・スタック置換では =0 であることに注意してください。 dirstack を設定することによって、スタックを任意に変更することができますが、最初のエレメント (現行作業ディレクトリー) は常に正しいものです。 cwd および owd シェル変 数も参照してください。
dunique この変数を設定した場合、pushd はスタックから name のインスタンスを除去してから これをスタックに入れます。
echo この変数を設定した場合、引数を持つそれぞれのコマンドは実行される直前にエコー されます。 非組み込みコマンドの場合、展開はすべてエコーの前に行われ ます。 組み込みコマンドは、コマンドおよびファイル名の置換の前にエコ ーされます。それらの置換がその後選択的に実行されるからです。 -x コマンド行オプションで設定します。
echo_style 組み込み echo のスタイル。 次のものに設定できます。
bsd
最初の引数が -n の場合は、改行をエコーしません。
sysv
エコー・ストリングの中で円記号エスケープ・シーケンスを認識します。
both
-n フラグと円記号エスケープ・シーケンス の両方を認識します (デフォルト)。
なし
何も認識しません。
デフォルトでは、ローカル・システム・デフォルト に合わせて both に設定します。
この変数の使用例を以下に示します。
 > echo $echo_style
 bsd
 > echo "\n"
 \n
 > echo -n "test"
 test>
 > set echo_style=sysv
 > echo $echo_style
 sysv
 > echo "\n"

 > echo -n "test"
 -n test
 > set echo_style=both
 > echo $echo_style
 both
 > echo -n "test"
 test> echo "\n"

 >set echo_style=none
 > echo $echo_style
 none
 > echo -n "test"
 -n test
 > echo "\n"
 \n
 >
edit 設定した場合、コマンド行エディターが使用されます。 対話式シェルではデフォルトで設定されます。
ellipsis 設定されている場合、%c'/'%. および %C プロンプト・シーケンス (prompt シェル変数を参照) は、スキップされたディレクトリーを、/ ではなく省略符号 (...) で示しています。
fignore 補完機能が無視するファイル名接尾部をリストします。
filec tcsh シェルでは、補完機能は常に使用されるので、この変数は無視されます。
gid ユーザーの実グループ ID。
group ユーザーのグループ名。
histchars ヒストリー置換で使用される文字を決定するストリング値。 その値の最初の文字がヒストリー置換文字として使用され、デフォルト文字 ! (感嘆符) が置き換えられます。 この値の 2 番目の文字は、即時置換の文字 ^ (曲折アクセント記号) にとって代わ ります。
histdup ヒストリー・リスト内の重複項目の処理を制御します。 all に設定した場合、ヒストリー・リストには固 有のヒストリー・イベントだけが入れられます。 prev に設定した場合、最後のヒストリー・イ ベントが現行コマンドと同じだったときには、現行コマンドはヒストリー に入れられません。 erase に設定した場合、同じイベントがヒストリ ー・リスト内にあると、その古いイベントは消去されて、現行の新しいイベ ントが挿入されます。 prev オプションと all オプションではヒストリー・イベントの番号が付けなおされるの で、ずれは生じません。
histfile history -S および history -L がヒストリー・ファイ ルを探すデフォルトの場所。 設定解除すると、~/.history が使用されます。histfile は、異なるマシン間で同じホーム・ディレクトリーを共有する場合、または異なる端末に別々のヒストリーを保管する場合に役立ちます。 通常は、 ~/.history の前に ~/.tcshrc だ けが検索場所になるので、histfile は、 ~/.login ではなく ~/.tcshrc の中に 設定する必要があります。
例 :
set histfile = ~/.history 
histlit 設定した場合、組み込みコマンド、エディター・コマンドおよ び savehist メカニズムは、ヒストリー・リスト内の リテラル (未展開) 形式の行を使用します。 toggle-literal-history エディター・コマンド も参照してください。
history 最初のワードは、保管するヒストリー・イベントの数を指示します。 オプショナルの 2 番目のワードは、ヒストリーの出力フォーマットを指示します。この ワードを指定しない場合、%h¥t%T¥t%R¥n が使用されます。 この書式シーケンスは prompt の部分で説明します。 (%R は意味が変化することに注意してください。) デフォルトでは 100 に設定されます。
home 呼び出し側のホーム・ディレクトリーに初期化されます。 ~ のファイル名展開はこの変数を参照します。
ignoreeof 空ストリングまたは 0 に設定されていて、入力装置が端末である場合、end-of-file コマンド (通常は空の行に ^D を入力することによってユーザーによって生成される) によって、シェルは終了する代わりに「Use "logout" to leave tcsh.」を印刷します。 これにより、シェルが誤って削除されるのを防ぐことができます。 n に設定した場合、シェルは n - 1 個 の end-of-file を連続して無視し、n 番目で終 了します。 設定しなかった場合、1 が使用されます。 すなわち、シェルは単一の ^D で終了します。
implicitcd この変数を設定した場合、入力されたディレクトリー名を、それがそのディレクトリーに対する変更要求であるかのようにコマンドとして取り扱います。 verbose に設定した場合、ディレクトリーの変更は標準出力にエコーされます。 この働きは、非対話式シェル・スクリプト、あるいは複数のワードを含 んでいるコマンド・ストリングでは、禁止されています。 ディレクトリー変更は、同様の名前のコマンドの実行より前に行われ ますが、別名置換よりは後に行われます。 波形記号および変数の置換は、正常に行われます。
inputmode insert または overwrite に設定した場合、エディターは各行の先頭でその入力モードになります。
listflags x、aA またはそれらの任意の組み合わせ (例えば、xA) に設定すると、それらは ls-F のフラグとして使用され、ls -xFls -Fals -FA またはそれらの組み合わせ (例えば、ls -FxA) のように機能します。a はすべてのファイル (「.」で始まっているファイルでも) を表示します。 A は「.」と「..」以外のすべてのファイルを表示し、x は下ではなく横にソートします。 listflags の 2 番目のワードを設定した場合、それは ls(1) へのパスとし て使用されます。
listjobs この変数を設定した場合、あるジョブが延期されるときすべてのジョブがリストされます。 long に設定した場合、リストは長形式になります。
listlinks この変数を設定した場合、ls-F 組み込みコマンドは、それぞれのシンボリ ック・リンクが指し示すファイルのタイプを示します。 その例については、tcsh の ls-F 組み込みコマンド : ファイルをリストするを参照してください。
listmax 最初に要求せずに list-choices エディター・コマンドがリストする項目の最大数。
listmaxrows 最初に要求せずに list-choices エディター・コマンドがリストする項目の行の最大数。
loginsh ログイン・シェルの場合、そのシェルが設定します。 シェル内で設定したり設定解除しても作用しません。 shlvl も参照してください。
logout 通常のログアウトの前にシェルによって normal に 設定され、自動ログアウトの前に automatic に設定されます。シェルがハングアップ・シグナルによって kill された場合は hangup に 設定されます。 autologout シェル変数も参照してください。
mail 着信メールがあるかどうかを確認するためのファイルまたはディレクトリーの名前で、ホワイト・スペースで区切られます。数値ワードが前に付く場合があります。 各プロンプトの前に、最後のチェックから 10 分が経過すると、シェルは各ファイルを検査し、filesize がゼロより大きく、アクセス時間より長い変更時刻がある場合には、「You have new mail.」と表示します (メールに複数のファイルが含まれている場合は「You have new mail in name.」)。

ユーザーがログイン・シェルにいる場合、無駄な通知を避けるために、シェ ルの始動時よりも後にメール・ファイルが変更されたのでない限り、メール ・ファイルは報告されません。 ほとんどのログイン・プログラムは、ユーザーがログインするときに ユーザーにメールが到着しているかどうかを知らせます。

mail で指定されたファイルがディレクトリーである場合、シェルは、そのディレクトリー内の各ファイルを個別のメッセージとしてカウントし、状況に 応じて 'You have n mails.' または 'You have n mails in name.' を報告します。 この機能は、主に Andrew Mail System のようにこの方法でメールを保管するシステムのために用意されています。

mail の最初のワードが数値である場合、それは異なるメール確認 インターバル (秒) とみなされます。 まれに、シェルは 'You have new mail.' ではなく 'You have mail.' と報告することがあります。

matchbeep never に設定した場合、補完機能はビープ音を鳴 らしません。 nomatch に設定した場合、一致する ものがないときにのみビープ音を鳴らします。 ambiguous を設定した場合、一致するものが複数 個あるときにビープ音を鳴らします。 notunique を設定した場合、正確に一致するもの が 1 つあるが、さらに他にもっと長くて一致するものがあるときにビープ音 を鳴らします。 この変数を設定しなかった場合には、ambiguous が使用されます。
nobeep ビープ音はまったく使用できません。
noclobber 入力または出力で説明されているように、ファイルが誤って破壊されていないこと、およびリダイレクトが既存のファイルを参照していることを確認するために、制約事項が出力リダイレクトに配置されます。
noglob ファイル名置換およびディレクトリー・スタック置換は禁止されます。 ファイル名を取り扱わないシェル・スクリプトにおいて、あるいはファイル名のリストが得られた後に展開を行いたくない場合に、このオプションは非常に役立ちます。
nokanji この変数を設定した場合、シェルが漢字をサポートする ようなとき (version シェル変数を参照)、メタキーを使用できるように漢字は使用不可にされます。
nonomatch 既存のどのファイルとも一致しないファイル名置換またはディレクトリー・スタック置換は、そのまま残され、エラーを起こすことはありません。 しかし、置換が不完全になる場合にはエラーになります。すなわ ち、echo [ は引き続きエラーになります。
nostat 補完機能の実行時に stat(2) を行ってはならないディレクトリー (またはディレクトリーと一致するグロブ・パターン (ファイル名の置換を参照)) のリスト。 これは、通常は、stat(2) の実行に時間のかかりすぎるディレクトリー (例えば、/afs) を除外するのに使用されます。
notify シェルはジョブの完了を非同期的に知らせます。 デフォルトでは、プロンプトを出力する直前にジョブの完了を伝えます。
owd 古い作業ディレクトリーで、cd および pushd が使用す る - (ハイフン) と同等です。 cwd および dirstack シェ ル変数も参照してください。
path 実行可能コマンドを探す対象となるディレクトリーのリスト。 ヌル・ワードは現行ディレクトリーを指定します。 パス変数が存在しない場合は、絶対パス名のみが実行されます。path は、始動時に PATH 環境変数からシェルによって設定されます。PATH が存在しない場合は、システム依存のデフォルト、例えば、 (/usr/local/bin /usr/bsd /bin /usr/bin) に設定されます。 シェルは、どのようにコンパイルされているかに応じて、'.' をパスの最初に置くか、最後に置くか、あるいはそれをまったく省略します。version シェル変数を参照してください。 -c オプションも -t オプションも渡されていないシェ ルは、 ~/.tcshrc の読み取りの後、path がリセットされる たびに、path 内のディレクトリーの内容をハッシュします。 シェルがアクティブである間に path 内のディレクトリーに新しいコマン ドを追加した場合、シェルがそれを検出できるように再ハッシュを行わなけ ればならないことがあります。
printexit- value この変数を設定した場合、対話式プログラムがゼロ以外の状況で終了すると、シェルは 'Exit status' を出力します。
prompt2 ¥ (円記号) で終了している行の後に、while および foreach のループにおいてプロンプトで使用するストリング。 prompt の場合と同じ書式 シーケンスを使用することができます (%R の意味が変わることに注意してください)。 対話式シェルではデフォルトで %R? に設定されます。
prompt3 自動スペル訂正を確認する際にプロンプトで使用するストリング。 prompt の場合と同じ書式シーケンスを使用でき ます (%R の意味が変わることに注意してください)。 対話式シェルではデフォルトで CORRECT>%R (y|n|e|a)? に設定されます。
promptchars 2 文字のストリングに設定した場合、prompt シェル変数内の %# 書式設 定シーケンスは、通常のユーザーの最初の文字とスーパーユーザー の 2 番目の文字に置き換えられます。
pushdtohome 引数なしの pushd は、cd のように pushd ^ を実行します。
pushdsilent pushd および popd はディレクトリー・スタックを出力しません。
recexact より長い一致があっても、正確に一致するもので補完機能は完了します。
recognize_ only_ executables コマンド・リストは、パス内の実行可能なファイルだけしか表示しません。
rmstar rm * の実行前にユーザーにプロンプトが出されます。
rprompt プロンプトが画面の左側に表示されているときに画面の右側 (コマンド入力の後ろ) に出力されるストリング。 これは、prompt と同じ書式設定文字を受け入れます。 これは、コマンド入力が不明確にならないように必要に応じて自動的に 消えたり現れたりします。また、プロンプト、コマンド入力、およびこれ自体が 最初の行に一緒に収まる場合にのみ現れます。 edit が設定されていない場合、rprompt はプロンプトの後、コマンド入力 の前に出力されます。
savedirs シェルは終了前に dirs -S を実行します。
savehist シェルは終了前に history -S を実行します。 最初のワードを数値に設定した場合、最高でその数の行が保管されます (その数はヒストリーと等しいかそれより小さくなければなりません)。 2 番目のワードを merge に設定すると、 ヒストリー・リストは既存のヒストリー・ファイル (ある場合) と置き換わるの ではなく、それとマージされます。そして、タイム・スタンプによってソート され、最新のイベントが保持されます。
例 :
set savehist = ( 15 merge )
sched sched 組み込みコマンドがスケジュール・イベントを出力する形式。 これを設定しない場合、%h¥t%T¥t%R¥n が使用されます。 この書式シーケンスは prompt の部分で説明した ものです。%R の意味が変わることに注意してくだ さい。
shell シェルが常駐するファイル。 これは、シェルを fork する際に、実行ビット ・セットを持っているファイルで、システムが実行することのできない ファイルを解釈するのに使用されます (組み込みおよび非組み込みコマンドの実行を参照)。 (システム依存の) シェルのホームに初期化されます。
shlvl ネストされるシェルの数。 ログイン・シェルでは 1 にリセット されます。 loginsh も参照してください。
status 最後のコマンドが戻す状況。 異常終了した場合は、0200 が状況に追加されます。tcsh 組み込みコマンドが失敗し、終了状況 1 が戻されます。その他の組み込みコマンドは、状況 0 を戻します。
tcsh R.VV.PP 形式のシェルのバージョン番号。ここで、R は主なリリース番号、VV は現行バージョン、PP はパッチ・レベルです。
term 端末タイプ。 通常は ~/.login 内に設定されます。
tperiod 周期的特殊別名の実行と実行の間の期間 (分単位)。
tty tty の名前。接続されていない場合には空です。
uid ユーザーのログイン名。
user ユーザーのログイン名。
verbose 各コマンドのワードが、ヒストリー置換 (ある場合) の実行後に出力されます。 -v コマンド行オプションで設定されます。
version バージョン ID スタンプ。 これは、シェルのバージョン番号 (tcsh を参照)、オリジン、リリース日付、ベンダー、オペレーティング・システムと マシン (VENDOR、OSTYPE、および MACHTYPE 環境変数を参照) および コンパイル時に設定されたオプションの (コンマで区切られた) リストを 含んでいます。 配布時にデフォルトとして設定されているオプショ ンにはそのことが示してあります。
8b
シェルは 8 ビット・クリーンです (デフォルト)。
7b
シェルは 8 ビット・クリーンではありません。
nls
システムの多文化サポートが使用されます。多文化サポートを持つシステムのデフォルトです。
条件
ログイン・シェルは、/etc/csh.cshrc の後で はなくその前に /etc/csh.login を実行し、また ~/.tcshrc およ び ~/.history の後ではなくそれらの 前に ~/.login を実行します。
dl
「.」は、セキュリティーのためにパスの最後に置かれます。デフォルトで。
nd
「.」は、セキュリティーのためにパスから省略されます。
vi - ディスプレイ指向の対話式テキスト・エディターを使用する
デフォルトは、emacs ではく vi スタイルの編集です。
dtr
ログイン・シェルは終了時に DTR を除去します。
bye
bye は logout の同義語であり、log は watchlog の代替名です。
al
autologout が使用可能に されます (デフォルト)。
kan
nokanji シェル変数が設定されていない限り、漢字が使用され、ISO 文 字セットは無視されます。
sm
システムの malloc が使用されます。
hb
<program> <args>規則は、シェル・スクリプトの実行時にエミュレートされます。
ng
組み込み newgrp が使用可能です。
rh
シェルは REMOTEHOST 環境変数を設定しようとします。
afs
ローカル認証が失敗した場合、 シェルは Kerberos サーバーを使用してパスワードまたはパスワード・フレーズを検査します。 afsuser シェル変数または AFSUSER 環境変数はローカル・ユーザー名を変更します。
管理者は、ローカル・バージョンの相違を示すために追加のストリングを入力 することができます。
visiblebell 設定した場合、音響ベルではなく画面の明滅が使用されます。 nobeep を参照してください (現時点では実装 されていません)。
watch ログインおよびログアウトについて監視するためのユーザー/端末の対のリ スト。 ユーザーが any の場合、指定されたユーザ ーに関してすべての端末が監視されます。その逆も同様です。 watch を(any any) に設定すると、すべてのユーザーとすべての端末が監視されます。 以下に例を示します。
set watch = (george ttyd 1 any console $user any)
と指定すると、ttyd1 のユーザー george、console のすべてのユーザー、およびすべての端末の本人 (または不法侵入者) の活動が報告されます。
デフォルトでは、ログインとログアウトは 10 分ごとに検査されますが、watch の最初のワードを数値に設定すれば、その分数ごとに検査を行うこと ができます。 以下に例を示します。
set watch = (1 any any)
と指定すると、1 分ごとにすべてのログイン/ログアウトが報告されます。 報告 を待てない場合は、log 組み込みコマンドを使用していつでも監視報 告を得ることができます。 watch を最初に設定したときには、(組み込み log の場合と 同様に) すべての現行ログインが報告されます。

who シェル変数は、監視報告の形式を制御します。

who 監視メッセージの書式制御ストリング。 以下のシーケンスは、示されている情報に置き換えられます。
%n
ログインまたはログアウトしたユーザーの名前。
%a
観察されたアクション ('logged on'、'logged off'、'replaced olduser on' など)。
%l
ユーザーがログインまたはログアウトを行った端末 (tty)。
%M
リモート・ホストの完全ホスト名。 またはログイン/ログアウトがローカル・ホストから行われた場合は「local」。
%m
最初の「.」(ピリオド) までのリモート・ホストのホスト名。 それが IP アドレスまたは X Window システム画面である場合には、フルネームが出力されます。
%M と %m は、 リモート・ホスト名を /etc/utmp に保管するシステムでのみ使用できます。 設定しなければ、%n は %m からの %a %l となるか、あるいは %n はリモート・ホスト名を保管しないシステムの %a %l とな ります。
wordchars forward-word、backward word などのエディター・コマンドによってワードの一部とみなされる非英数字のリスト。 設定しなかった場合は、*?_-.[] ~= が使用されます。

表 1で記述されていない tcsh シェル変数については、以下のとおりです。

prompt
端末から各コマンドを読み取る前に印刷されるストリング。プロンプトには、以下のフォーマット・シーケンスを含めることができます。これらのシーケンスは、指定された情報に置き換えられます。
%/
現行作業ディレクトリー。
%~
現在の作業ディレクトリですが、ファイル名の置換に従って、自分のホーム・ディレクトリは「~」で表され、他のユーザーのホーム・ディレクトリは「~user」で表されます。~user 置換は、シェルが現在のセッションのパス名で ~user をすでに使用している場合にのみ発生します。
%c[[0]n], %.[[0]n]
現行作業ディレクトリーの末尾コンポーネント、あるいは 数字の n がある場合 には n 個の末尾コンポーネント。 n0 で始まっている場合には、形式 /trailing のトレーラー・コンポーネント の前にあるコンポーネントでスキップするものの数。 ellipsis シェル変数が設定されている場合、スキップされるコンポーネントは省略符号によって表され、全体が ...trailing になります。~ 置換は %~~ として実行されますが、末尾のコンポーネントをカウントする際には、~ コンポーネントは無視されます。
%C
%c と似ていますが、^ 置換はありません。
%h, %!, !
現行ヒストリー・イベント番号。
%M
完全ホスト名。
%m
最初の「.」(ピリオド) までのホスト名。
%S (%s)
スタンドアウト・モードの開始 (停止)。
%B (%b)
太文字モードの開始 (停止)。
%U (%u)
下線モードの開始 (停止)。
%t, %@
12 時間 AM/PM 形式の時刻。
%T
%t と似ていますが、24 時間形式です (ただし ampm シェル変数を参照)。
%p
秒を含む 12 時間 AM/PM 形式の正確な時刻。
%P
%p と似ていますが、24 時間形式です (ただ し ampm シェル変数を参照)。
\c
cbindkey 中のように解析されます。
^c
cbindkey 中のように解析されます。
%%
1 つの %。
%n
ユーザー名。
%d
Day 形式の曜日。
%D
dd 形式の日。
%w
Mon 形式の月。
%W
mm 形式の月。
%y
yy 形式の年。
%Y
yyyy 形式の年。
%l
tcsh シェルの tty。
%L
プロンプトの最後から画面の最後または行の最後までを消去します。
%$
$ の直後のシェル変数または環境変数を展開します。
%#
通常のユーザーの場合は > (または promptchars シェル変数の最初の文字)、スーパーユーザーの場合は # (または promptchars の 2 番目の文字)。
%{string%}
リテラル・エスケープ・シーケンスとして string を含みます。 これは端末属性を変更する場合にのみ使用してください。カーソル位置を動 かしてはなりません。 これは prompt の最後のシーケンスにはできません。
%?
プロンプトの直前に実行されるコマンドの戻りコード。
%R
prompt2 ではパーサーの状況。 prompt3 では訂正されたストリング。 history ではヒストリー・ストリング。
太字、スタンドアウト、および下線のシーケンスは、しばしばスーパーユーザー ・シェルを区別するのに使用されます。 以下に例を示します。
>set prompt = "%m [%h] %B[%@%b [%/] you rang?"
tut [37] [2:54] [/usr/accts/sys] you rang? _
対話式シェルにおいてはデフォルトでは %# に設定されます。
symlinks
これは、シンボリック・リンクの解決を制御するために、いくつかの異なる値に設定できます。
  • chase に設定すると、シンボリック・リンク を含んでいるディレクトリーに現行ディレクトリーが変更されると常に、そのリンクが指し示すディレクトリーの実名に展開されます。 ユーザーのホーム・ディレクトリーについてはこれは機能しません。
  • ignore に設定すると、リンクが交差する前に、シェルは現行ディレクトリーを基準にして現行ディレクトリーを作成しよ うとします。 これは、シンボリック・リンクを介して cding を行い、次に cd..'ing が元のディレクトリーに戻すことを意味します。 これが影響するのは、組み込みコマンドとファイル名補完だけです。
  • expand に設定すると、シェルはパス名と類似した 引数を実際に展開することにより、シンボリック・リンクを決定しようと します。 これは、組み込みコマンドだけでなく、いずれのコマンドにも影 響を与えます。 残念ながら、これは認識の難しいファイル名 (コマン ド・オプションに組み込まれたファイル名など) については機能しません。 引用符号を用いることにより展開を抑制することができます。 一般にこの設定は非常に便利ですが、展開する引数を認識し損なうと、誤解を生じさせたり、混乱を招くことがあります。 妥協案として、ignore を使用し、必要に 応じて (デフォルトで ^X-n にバインドされた) エディター・ コマンド normalize-path を使用できます。
いくつかの例を順に示します。 まずは試しにいくつかのディレクトリーをセットアップします。
        > cd /tmp
        > mkdir from from/src to
        > ln -s from/src to/dist 
シンボリック・リンクが設定されていない場合は次のようになります。
        > cd /tmp/to/dist; echo $cwd
        /tmp/to/dist
        > cd ..; echo $cwd
        /tmp/from 
シンボリック・リンクが chase に設定されている場合は次のようになります。
        > cd /tmp/to/dst; echo $cwd
        /tmp/from/src
        > cd ..; echo $cwd
        /tmp/from
シンボリック・リンクが ignore に設定されている場合は次のようになります。
        > cd /tmp/to/dist; echo $cwd
        /tmp/to/dst
        > cd ..; echo $cwd
        /tmp/to
シンボリック・リンクが expand に設定されている場合は次のようになります。
        > cd /tmp/to/dist; echo $cwd
        /tmp/to/dst
        > cd ..; echo $cwd
        /tmp/to
        > cd /tmp/to/dist; echo $cwd
        /tmp/to/dst
        > cd ".."; echo $cwd
        /tmp/from
        > /bin/echo ..
        /tmp/to
        > /bin/echo ".."
        .. 
expand 展開は、cd などの組み込みの ignore と同じように機能し、引用符で囲まれて防止され、ファイル名が組み込み以外のコマンドに渡される前に発生します。
time
ある数値に設定すると、指定された秒数を超える CPU 時間を要したコマンドについて、コマンド完了後に time 組み込みコマンドが自動的に実行されます。 2 番目のワードがある場合、それは time 組み込みコマンドの出力の書式制御 ストリングとして使用されます。 以下のシーケンスを書式制御ストリングの中で使用できます。
%U
ユーザー・モードでプロセスが費やした CPU 時間 (秒単位)。
%S
カーネル・モードでプロセスが費やした CPU 時間 (秒単位)。
%E
経過した (壁時計) 時間 (秒単位)。
%P
(%U + %S) / %E として計算された CPU のパーセント。
%W
プロセスがスワップされた回数。
%X
(共用) テキスト・スペースの平均使用量 (K バイト単位)。
%D
(非共用) データ/スタック・スペースの平均使用量 (K バイト単位)。
%K
合計使用量 (%X + %D) (K バイト単位)。
%M
任意の時刻にプロセスが使用していた最大メモリー (K バイト単位)。
%F
メジャー・ページ・フォールトの数 (ディスクから持ってくる必要のあったページ)。
%R
マイナー・ページ・フォールトの数。
%I
入力操作の数。
%O
出力操作の数。
%r
受信したソケット・メッセージの数。
%s
送信したソケット・メッセージの数。
%k
受信したシグナルの数。
%w
自発コンテキスト・スイッチ (wait) の数。
%c
非自発的コンテキスト・スイッチの数。
BSD リソース制限機能がない場合、最初の 4 つのシーケンスしかサポ ートされません。 リソース使用状況報告書をサポートするシステムの デフォルトの時刻形式は次のとおりです。
Uu   %Ss %E %P %X+%Dk %I+%Oio   %Fpf+%Ww
:NONE.

表 2には tcsh 環境変数のリストが含まれています。

表 2. tcsh 環境変数
環境変数 目的
COLUMNS サブディレクトリーが現行ディレクトリーにない場合に、cd がサ ブディレクトリーを探すディレクトリーのリスト。
DISPLAY X Window システムが使用します。 設定した場合、シェルは AUTOLOGOUT を設定しません。
EDITOR デフォルト・エディターへのパス名。 VISUAL 環境変数およ び run-fg-editor エディター・コマンドも参照 してください。
GROUP group シェル変数と同等です。
HOME HOME シェル変数と同等です。
HOST シェルが実行されているマシンの名前に初期化されます。これは、gethostname システム・コールによって求めら れます。
HOSTTYPE シェルが実行されているマシンのタイプに初期化されます。これは、コンパイル時に判別されます。 この変数は一般にはもう使われていないもの であり、将来のバージョンでは取り除かれる予定です。
HPATH run-help エディター・コマンドがコマンドの資料を 探す対象となるディレクトリーの (コロンで区切られた形の) リスト。
LANG 優先文字環境を指定します。 各国語システム報告書を参照してください。
LC_CTYPE この変数を設定した場合、CTYPE 文字処理だけが変更されます。 各国語システム報告書を参照してください。
LINES 端末上の行数。 管理端末を参照してください。
MACHTYPE マシン・タイプ (マイクロプロセッサー・クラスまたはマシン・モデル) で あり、コンパイル時に判別されます。
NOREBIND この変数を設定した場合、出力可能文字は SELF-INSERT-COMMAND に再バインドされません。 ユーザーが NOREBIND を設定した後、新しいシェルを開始する必要があります。 各国語システム報告書を参照してください。
OSTYPE コンパイル時に判別されるオペレーティング・システム。
PATH 実行可能コマンドを探す対象となるディレクトリーの (コロンで区切られた 形の) リスト。 path シェル変数と同等ですが、形式が異なっていま す。
PWD cwd シェル変数と同等ですが、それと一致させられ ません。実際にディレクトリーが変更された後しか更新されません。
REMOTE-HOST リモートからのユーザーのログイン元のホスト。その場合、シェルはそのホスト を判別することができます。 (現在、z/OS tcsh シェルは、REMOTEHOST が定義された状態でコンパイルされていません。version シェル変数を参照してください。)
SHLVL shlvl シェル変数と同等です。
TERM term シェル変数と同等です。
USER user シェル変数と同等です。
VENDOR コンパイル時に決定されるベンダー。
VISUAL デフォルトのフルスクリーン・エディターへのパス名。 editor 環境変数および run-fg-editor エディター・コマンドを参照してください。

tcsh シェル変数を使用した自動変換の制御

tcsh シェルが stdin、stdout、または stderr をリダイレクトしている場合、シェルはタグ付けされたファイルのデフォルトを非自動変換に、およびリダイレクトで作成された ファイルのデフォルトを非タグ付けにします。 以下の tcsh シェル変数はこの動作をオーバーライドします。
_TAG_REDIR_IN=TXT
リダイレクトされた stdin では、そのファイルのテキスト・フラグ (TXTFLAG) は以下のようにタグ付けされているものとして、オーバーライドされます。

TXTFLAG = ON、CCSID = 既存のファイル・タグ CCSID

CCSID = 0 の場合、効果はありません。

_TAG_REDIR_IN=BIN
リダイレクトされた stdin では、そのファイルのテキスト・フラグ (TXTFLAG) は以下のようにタグ付けされているものとして、オーバーライドされます。

TXTFLAG = OFF、CCSID = 既存のファイル・タグ CCSID

これにより、自動変換が使用不可となります。

_TAG_REDIR_OUT=TXT
リダイレクトされた stdout は以下のようにタグ付けされます。

TXTFLAG = ON、CCSID = 最初の書き込み時点の プログラム CCSID (まだタグ付けされていない場合)

_TAG_REDIR_OUT=BIN
リダイレクトされた stdout は以下のようにタグ付けされます。

TXTFLAG = OFF、CCSID = 最初の書き込み時点の プログラム CCSID (まだタグ付けされていない場合)

_TAG_REDIR_ERR=TXT
リダイレクトされた stderr は以下のようにタグ付けされます。

TXTFLAG = ON、CCSID = 最初の書き込み時点の プログラム CCSID (まだタグ付けされていない場合)

_TAG_REDIR_ERR=BIN
リダイレクトされた stderr は以下のようにタグ付けされます。

TXTFLAG = OFF、CCSID = 最初の書き込み時点の プログラム CCSID (まだタグ付けされていない場合)

自動変換シェル変数は、1 コマンドに対して、またはシェル・セッションかシェル・スクリプト内の 複数コマンドに対して指定することができます。 その変数がユーザーの .tcshrc ファイルに設定されていると、子シェル、すなわちネストされたシェル・スクリプトに影響します。
注: 標準の tcsh シェルの実行では変数割り当て前にリダイレクトが行われるために 、1 つのコマンドに対するシェル変数を指定するための構文は、set var=value です。 次に例を示します。
(set _TAG_REDIR_OUT=TXT; command >file)

これらのシェル変数は、パイプライン・コマンドでも使用できます。 例えば、これらの変数を使用して、パイプラインに書き出す各コマンドの標準出力またはパイプラインから読み込む各コマンドの標準入力にタグ付けすることができます。

tcsh ファイル

/etc/csh.cshrc
すべてのシェルが最初に読み取ります。
/etc/csh.login
/etc/csh.cshrc の後にログイン・シェルが読み取ります。
~/.tcshrc
/etc/csh.cshrc またはそれと同等のものの 後にすべてのシェルが読み取ります。
~/.history
savehist が設定されている場合、 ~/.tcshrc の後にログイン・シェルが読み取 ります。 histfile も参照してください。
~/.login
シェルは、 ~/.tcshrc およ び ~/.history の後に ~/.login を読 み取ります。 version シェル変数を参照してください。
~/.cshdirs
savedirs が設定されている場合、 ~/.login の後にログイン・シェルが読み取り ます。 dirsfile も参照してください。
~/.logout
ログアウト時にログイン・シェルが読み取ります。
/bin/sh
# で始まっていないシェル・スクリプトを解釈するのに使用されます。
/tmp/sh*
< < の一時ファイル。

tcsh シェル : 問題と制限事項

tcsh シェルのいくつかの制限事項を以下に示します。
  • ワードは 1024 文字を超えることはできません。
  • システムでは、引数リストが 10240 文字に制限されています。
  • ファイル名展開を含んでいるコマンドの引数の数は、引数リストで 許可されている文字数の 1/6 に制限されています。
  • コマンド置換では、引数リストで許可されている文字数を超える文字 は置換できません。
  • ループを検出するために、シェルは 1 行の中の別名置換の数を 20 に 制限しています。

中断されたコマンドが再開されたときに、tcsh シェルは、そのコマンドが開始されたときのディレクトリーを 出力します (そのディレクトリーが現行ディレクトリーと異なる場合)。 これは、ジョブが内部的にディレクトリーを変更している 可能性があるので、誤解を生じる (つまり、誤りである) 可能性があります。

シェルの組み込み機能は、停止不能であり、再始動ができません。 'a ; b ; c' 形式のコマンド・シーケンスも、停止しようとすると、適 切に処理されません。 ユーザーが 'b' を停止した場合、tcsh シェルは即時に 'c' を実行します。 この展開が別名によって行われる場合に、これは特に顕著に見られます。 コマンドのシーケンスをサブシェルに強制的に移すには、それを () で 囲みます。例えば、( a ; b ; c ) のようにします。

プロセスが開始された後の tty 出力の制御が自由に行えません。 仮想端末インターフェースでは、 出力制御用のオプションがさらに多く用意されています。

シェル・プロシージャーをシミュレートするために別名置換がかなりよく使用されます。 別名ではなくシェル・プロシージャーを用いるようにしてください。

ループ内のコマンドはヒストリー・リストには含まれません。 制御構造は、組み込みコマンドとして認識するのではなく、構文解析してください。 これにより、制御コマンドはどこにでも置くことができ、| で結合できるようになります。また、& および ; (セミコロン) メタ 構文で使用することもできます。

foreach は、here ドキュメントを、 その最後を探すときは無視しません。

コマンド置換の出力で : (コロン) 修飾子を使用できなければなりません。

端末でカーソルを上方へ移動できない (端末タイプ 'dumb' の) 場合、画面の幅よりも長い行については画面の更新が適切に行えません。

HPATH および NOREBIND は必ずしも環境変数にする必要はありません。

'?'、'*' または '[]' のいずれも使用していないグロブ・パターン、あるいは '{}' または '~' を使用しているグロブ・パターンは正しく否定されません。

if の単一コマンド形式は、式が偽であり、コマン ドが実行されない場合であっても、出力リダイレクトを行います。

ls-F は、ファイル名をソートする際にファイル識別文字を組み込みますが、ファイル名の中の制御文字を正しく処理できません。 これは割り込みができません。

visiblebell シェル変数は現在のところ実装され ていません。

ファイル名補完およびプログラミングされた補完においては、C 補完規則ワード・リスト・タイプでは、 指定のディレクトリーから補完が正しく選択されません。

tcsh シェルが正しくサポートしないロケール (コード・ページ) が 3 つあり ますが、それは IBM-1388 (中国語)、IBM-933 (韓国語) およ び IBM-937 (中国語 (繁体字)) です。

tcsh の保守およびテストに関するヘルプが必要な場合には、'subscribe tcsh' というテキストを含めたメールを listserv@mx.gw.com にお送りください。

関連情報

: (コロン)@ (at)aliasbg breakcdcontinueechoeval execexitfghistoryjobs killnewgrpnicenohupprintenv setshiftstopsuspendtime umaskunaliasunsetwait