tcsh [–bcdeFfimnqstvVxX]
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 シェルの最初の引数 (引数 0) が - (ハイフン) である場合、それはログイン・シェルです。引数として –l だけを指定 して tcsh シェルを起動することによっても、ログイン・シェルを指定する ことができます。
オプション引数を処理した後に引数がまだ残っていて、–c、–i、–s、または –t のいずれも 指定されていない場合には、最初の引数が、実行されるコマンドのファイル (つまりスクリプト) の名前とみなされます。 シェルはこのファイルを開き、その名前を保管します。おそらく その名前は $0 で再置換されます。 多くのシステムでは、シェル・スクリプトがこの シェルとの互換性のないようなシェルを使用するので、tcsh シェルでは その文字が # ではない (つまりコメントで始まっていない) スクリプトを実行するために そのような標準シェルを使用します。
残りの引数は argv シェル変数に入れられます。
このトピックでは、まずコマンド行エディターについて説明します。 その 後、「補完機能とリスト機能」ならびに「スペル訂正機能」について解説します。これらは エディター・コマンドとして実装されている 2 組の機能ですが、注目すべきもの なので別個に扱います。最後の「エディター・コマンド」のトピックでは、tcsh シェルに固有のエディター・コマンドおよびそれらのコマンドのデフォルト・バインディングをリストして説明します。
コマンド行入力は、GNU Emacs または vi で使用されるキー・シーケンスと 非常によく似たキー・シーケンスを使って編集することができます。 エディターは、編集シェル変数を設定している場合にしかアクティブになりま せん。編集シェル変数はデフォルトでは対話式シェル内にあります。 bindkey 組み込みコマンドはキー・バインディングを表示したり変 更したりできます。 デフォルトでは、Emacs タイプのキー・バインディングが使用されますが、bindkey でそのキー・バインディングを vi タイプのバインディング に変更することができます。
tcsh シェルは、固有の省略形が与えられると、それを補完にできる 場合がよくあります。ワードの一部 (例えば、ls /usr/lost) を入力してか ら、タブ・キーを押して complete-word エディター・ コマンドを実行してください。このシェルが、入力バッファー内の不完全なワードを完全なワードに置換し、ファイル名 /usr/lost を完全な名前 /usr/lost+found にします。 (末尾の / (スラッシュ) に注目してください。補完機能により、補完さ れたディレクトリーの末尾には / が追加され、補完された他のワードの末尾に スペースが追加されます。このようにして、入力が速く行われ、また補完機 能が正常に実行されたことが目で見て分かります。 addsuffix シェル変数を使用すれば、この設定を解除して、これが行われないようにすることができます。)一致するものが 見つからない場合 (例えば、/usr/lost+found が存在しない場合など) は、端末のベルが鳴ります。 ワードがすでに完全なものである場合 (例えば、ご使用のシステムに /usr/lost が存在する場合や、 あらかじめすべてを入力しておいた場合など) は、/ またはスペースが末尾に追加されます (/ やスペースがまだ末尾に付いていない場合)。
補完機能は、行の末尾以外ならどこででも作用し、テキストが補完さ れると、行の残りの部分は右側に押されることになります。 ワードの中間あたりで補完機能が働くと、カーソルの右側の文字が残 ってしまい、それを削除しなければならないことがよくあります。
コマンドと変数は大体同じ仕方で補完することができます。 例えば、em [tab] と入力 すると、システム内に 'em' で始まるコマンドが emacs だけし かなければ、'em' が完全な形の 'emacs' になります。補完機能は、パス内の任意のディレクトリーの中にあるコマンドを検出する ことができ、またある絶対パス名を与えられた場合もコマンドを検出できます。 echo $ar[tab] と入力すると、'ar' で始ま る変数がほかになければ、'$ar' は完全な形の '$argv' になります。
シェルは入力バッファーを解析して、補完するワードがファイル名なのか、コマンドなのか、あるいは変数なのかを判別します。 バッファー内の最初のワード、および ';'、'|'、'|&'、'&&' また は '||' の後に続いている最初のワードは、コマンドとみなされます。 '$' で始まっているワードは変数とみなされます。その他のものはファイル名です。空の行はファイル名として 補完されます。
> ls /usr/l[^D]
lbin/ lib/ local/ lost+found/
> ls /usr/l
> set autolist
> nm /usr/lib/libt[tab]
libtermcap.a@ libtermlib.a@
> nm /usr/lib/libterm
autolist が ambiguous に設定されている場合、選択項目がリストされるのは、一致するものが複数個あり、補完機能がマッチングを行う名前に新しい文字を追加しなかった場合だけです。
> 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 が設定 されている場合には何も行われません。エディター・コマンド list-choices にバインドさ れた M-^D は、行のどの部分においても存在する補完をリストしま す。また望むならば、list-choices (あるいは削除やリストやログアウトを行うまたは行わない、delete-char-or-list-or-eof の項に示されて いる関連エディター・コマンドのいずれか) を組み込みコマンド bindkey を使って ^D にバインドすることができます。
complete-word-fwd および complete-word-back エディター・コマンド (デフォルトでは いずれのキーにもバインドされていない) を使用すれば、存在する 補完のリスト中を前後に移動して、現行のワードをリスト中 の次のワードまたは前のワードに置き換えることができます。
> 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 の中の
接尾部で終わっているからです。~ が展開されてホームにならないように ~ の前に ¥ を付ける
必要があります (『ファイル名の置換』を参照)。
補完が 1 つしかない場合には、fignore は無視されます。complete シェル変数を enhance に設定すると、補完機能は、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 つのファイルすべてがリストされます。これは大文字小文字が無視され、ハイフンと下線が同じとみなされるからです。ただし、ピリオドはハイフン
や下線と同等ではありません。> ls
fodder foo food foonly
> set recexact
> rm fo[tab]
この場合、'fo' は 'fod' または 'foo' に展開できるのでビープ音が鳴りま
す。しかし、さらに 'o' を次のように入力すると、> rm foo[tab]
> rm foo
'food' や 'foonly' も一致していますが、補完機能によって得られる
のは 'foo' だけです。autoexpand を設定すれば、補完機能が試みられるたびにそれに先立って expand-history エディター・コマンドが実行されるようになり、correct を設定すれば、ユーザーが Enter キーを
押すと、コマンドが自動的に補完されるようになります。
matchbeep は、さまざまな状況において
補完機能がビープ音を鳴らすようにも鳴らさないようにも設定でき、nobeep を設定するとビープ音がまったく鳴らないよ
うにすることができます。nostat を、ディレクト
リーのリスト、およびディレクトリーと一致するパターンのリスト (あるい
はその両方) に設定すれば、補完機能がそれらのディレクトリー
を stat(2) しないようにすることができます。>set listflags=x>
ls-F /u/pluto
Dir1/exe1*
>set nostat=(/u/pluto/)
>ls-F /u/pluto
Dir1exe1
>
ただし、末尾の / (スラッシュ) を保持する場合には、nostat を設定する際に注意が必要です。最後に、complete 組み込みコマンドを使用すれば、ファイ ル名やコマンドや変数以外のワードを補完する方法をシェルに指 示することができます。補完機能とリスト機能はグロブ・パターン (ファイル名の置換を参照)) に 対しては働きません。しかし、list-glob およ び expand-glob エディター・コマンドがグロブ・パ ターンに対して同等の機能を実行します。
tcsh シェルは、ファイル名、コマンド、および変数名を補完およびリスト するだけでなく、ときにはそれらのスペルを訂正することもできます。
個々のワードは、spell-word エディター・ コマンド (通常は、M-s および M-S にバインドされています。ここで、M は Meta キーまたは Esc (エスケープ) キーを表します) を使用してスペル訂正を行う ことができ、入力バッファー全体は spell-line (通常は M-$ にバインドされています) を使用してスペル訂正できます。 correct シェル変数を 'cmd' に設定すると コマンド名を訂正でき、'all' に設定すると行全体を訂正できます。Enter キーを押すたびに訂正されます。
> 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- 文字 は、メタキ ーを持たない端末でエスケープ文字として入力されるメタ文字を意味しています。 大文字小文字の区別は重要ですが、デフォルトで文字にバインドされている コマンドは、便宜上、大文字と小文字の両方にバインドされています。
>ls test*[^X-*]
上記は次のように展開されます。>ls test1.c test2.c
これは、'test' で始まるファイルがディレクトリー内に 2 つしかない場
合です。ファイル転送プロトコル (File name substitution を参照。tcsh シェルは、入力行をブランクやタブの位置でワードに分割します。特殊文字 '&'、'|'、';'、'<'、'>'、'('、および ')'、ならびに 二重文字 '&&'、'||'、'<<' および '>>' は、ホワイト・ス ペースで囲まれていてもいなくても必ず独立したワードになります。
tcsh シェルの入力が端末からではないときには、コメントを開始するのに 文字 '#' が用いられます。 それぞれの # および # が現れている入力行の残りの部分は、廃棄されてから構文解析が続行されます。
特殊文字 (ブランクやタブを含む) は、その前に円記号 (¥) を 付けるか、あるいは単一引用符 (')、二重引用符 (") または 開き引用符 (' ` ') で囲むことにより、特殊な意味を持たないようにすることが でき、また状況に応じて別のワードの一部とすることも可能です。 前に ¥ が付けられた改行は、これ以外の方法で引用されているので なければ、ブランクと等しくなりますが、引用符で囲まれると、このシーケンスは改行になります。
また、ヒストリー置換子以外の置換子 (置換を参照) は すべて次の方法で抑制することができます。すなわち、置換子が含まれている ストリング (またはストリングの一部) を単一引用符で囲むか、重要文字 (例えば、変数 置換またはコマンド置換についてはそれぞれ '$' または '`') を ¥ を使って引用するという 方法です。(別名置換も例外ではありません。別名として定義されているワードの 任意の文字を何らかの方法で引用するなら、別名の置換が抑制されます。 別名を引用する場合、通常は別名の前に円記号を付けます。)ヒストリー置換は、単一引用符ではなく、円記号を使って抑制します。ストリングを二重引用符または開き引用符で囲んでも変数置換やコマンド 置換は行われますが、その他の置換は抑制されます。
テキストを単一引用符または二重引用符で囲むと、単一ワード (または単一 ワードの一部) になります。そのストリングの中のメタキャラクター (ブランクやタブを含む) は 独立したワードとはなりません。 ある特別な場合だけは、二重引用符で囲まれたストリングが複数のワードと見なされることがありますが (コマンド置換)を参照)、単一引用符で囲 まれたストリングの場合にはそのようなことはありません。開き引用符は特殊なものであり、コマンド置換のシグナルを送ります。その結果、複数のワードになる場合があります。
複雑なストリング、特に引用に用いられる文字を含んでいるストリングの場合には、混乱を引き起こす可能性があります。引用符は、人が文章を書く場合のように用いる必要はないことを覚え ておいてください。ストリング全体を引用するのではなく、ストリングの中の引用する必要のある 一部だけを、状況に応じて種々の引用方法で引用するほうが簡単です。
backslash_quote シェル変数を設定すれば、円記号が常に ¥、'、およ び " を引用するように指定できます。 このようにすると複雑な引用を簡単にすることができますが、csh (または tcsh) スクリプトでは構文エラーが発生する可能性があります。
ここでは、入力で tcsh シェルが実行する種々の変換を、その示されている 順序に従って説明します。また、関係しているデータ構造、ならびにコマ ンドとコマンドに影響する変数を取り扱います。 置換は、コマンド構文で説明されているように引用によって抑制することができます。
端末から入力されるそれぞれのコマンド (またはイベント) はヒストリー・リストに保管されます。 直前に入力されたコマンドは必ず保管されます。また history シェル変数を使用すれば、保管するコマン ドの数を設定することができます。 histdup シェル変数を使用すれば、重複するイベ ントや連続して重複するイベントを保管しないよう設定することができます。
保管されるコマンドには、1 から順番に番号が付けられ、またタイム・ スタンプも付けられます。イベント番号を使用しなければならないとは限りませんが、prompt シェル変数に感嘆符 (!) を 入れることにより、現行のイベント番号をプロンプトの一部にすることが できます。
シェルは、実際に展開形式およびリテラル (非展開) 形式でヒストリーを 保管します。histlit シェル変数を設定すると、ヒストリーを表示お よび保管するコマンドはリテラル形式を使用します。
history 組み込みコマンドは、ヒストリー・リストの出力、ファイルへの保管、復元および消去を、いつでも行うことができます。savehist シェル変数および histfile シェル変数を使えば、ログアウト時にヒストリー・リストが自動的に 保管されたり、ログオン時にヒストリー・リストが復元されるように設定 することができます。
ヒストリー置換により、ワードがヒストリー・リストから入力ストリームに取り込まれます。そのため、コマンドを繰り返したり、現行コマンドで直前のコマンドの引数を 繰り返したり、あるいは直前のコマンドでのスペルの間違いを修正したりするこ とが容易になり、ほとんど入力しなくても高いレベルの信頼性でそれらが行われる ようになります。
ヒストリー置換子は ! の文字で開始されます。 ヒストリー置換子は入力ストリーム内のどの 位置でも開始できますが、ネストはされません。 ! の前に ¥ を付けてその文字自体の特別の意味がないようにする ことができます。便宜上、 ! の後にブランク、タブ、改行、= または ( が 続いている場合には、! は未変更のまま渡されます。入力行が ^ で始まっている場合にもヒストリー置換が行われます。ヒストリー置換のシグナルを送るのに用いられる文字 (! および ^ (キャレット)) は、histchars シェ ル変数を設定することにより変更することができます。ヒストリー置換子を含んでいる入力行は、実行され る前に出力されます。
ヒストリー置換子は、イベント指定 (ワードの取り出し元に なるイベントを示すもの)、ワード指定子 (選択され たイベントから特定のワードを選択するもの)、および 修飾子 (選択されたワードを操作するもの)、あるい はそれらすべてを含んでいる場合があります。
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 は、n で始まるイベント 9 を表します。!?old? は、 old を含んでいるイベント 12 を表し
ます。ワード指定子も変更子もなければ、ヒストリー参照は単純にイベント全体に展開さ
れるので、コピー・コマンドを再実行するには !cp を入力し、diff 出力が画面の上部からはみでた場合には !!|more を入力します。ヒストリー参照は、必要に応じて周囲のテキストから中括弧で孤立させることが できます。 例えば、!vdoc は vdoc で始まっているコマン ドを見つけようとしますが、この例ではそれはありません。しかし、!{v}doc は明示的に vi wumpus.mandoc に展開されます。 中括弧に囲まれていても、ヒストリー置換子はネストされません。
csh は、例えば !3d を文字 d の付いているイベント 3 に展開しますが、tcsh はそれを 3d で始まっている最後のイベントに展開します。つまり、完全に数値だけの引数しかイベント番号として扱いません。 これによって、番号で始まっているイベントを再呼び出しすることが可能に なります。!3d を csh の場合のように展開するには、!¥3d としてください。
イベント指定とワード指定子を区切っている : は、引数セレクタ ーが '^'、'$'、'*'、'%' または '-' で始まっている場合には省略す ることができます。例えば、上記の diff コマンド は diff !!^.old !!^ また はそれと同じ意味の diff !!$.old !!$ とすることができ たかもしれません。 しかし、!! を ! のように省略すると、- (ハイフン) で始まっている 引数セレクターはイベント指定として解釈されてしまいます。
ヒストリー参照はワード指定子を持つことができますが、イベント指定はなくてもかまいません。その場合、ヒストリー参照は直前のコマンドを参照します。 上記の diff の例を引き続き用いるなら、このコマンドは簡単に diff !^.old !^ と することができます。あるいは引数を逆の順序で得るため には単に diff !* と入力することができます。
例えば、diff コマンドは、同じ行の最初の引数 (!#^) か ら .old を除去するのに :r を使用して、diff wumpus.man.old !#^:r のようにすることが できたかもしれません。echo hello out there のような コマンドについて考えた場合、'hello' を大文字にする には echo !*:u、大声のスタイルにする には echo !*:au、また実際に叫び声をあげるようなスタイルにする には echo !*:agu となります。 mail -s "I forgot my password" rot の 後に !:s/rot/root を続ければ、'root' のスペルが訂正され ます (別の方法については、スペル訂正機能を参照してください)。
置換子用の特殊な省略形があります。^ は、これが入力行の先頭文字で ある場合には、!:s^ と等しくなります。 このため、上の例のスペル訂正を行う には ^rot^root のようにすることができます 。 明示的に ! で始まらないヒストリー置換子はこれしかありません。
% 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 番目のコロンの後に $ ではなく別の変更子を予期するためです。シェルは、alias および unalias コマンドで設定、設定解除、および出力することができる別名のリストを保守します。 コマンド行が解析されて単純なコマンドに分割された 後 (コマンド実行を参照)、各コマンドの最初のワードが別名 を持っているかどうか、左から右の順に検査されます。 持っている場合には、最初のワードは別名に置換されます。 別名がヒストリー参照を含んでいる場合には、元のコマンドが直前の入力行にある かのようにヒストリー置換が行われます。 別名がヒストリー参照を含んでいない場合には、引数リストには手が加えられま せん。
したがって、ls の別名が ls -l である場合、コマン ド ls /usr は ls -l /usr となり、引数リストはここではそのままになっています。 lookup の別名が grep !^ /etc/passwd である場合には、lookup bill は grep bill /etc/passwd となります。 別名は、パーサーのメタ構文をインストールするのに使用できます。 例えば、alias print 'pr ¥!* | lpr' は、引数をライン・プリンターに出力する コマンド (print) を定義します。
別名置換は、その最初のワードが別名を持っていないコマンドを検出するまで 繰り返されます。 別名置換が (すぐ上の例のように) 最初のワードを変更しないような場合、ループを回避するためにフラグが付けられます。 その他のループが起きた場合には検出されて、エラーが発生します。
一部の別名はシェルが参照します。tcsh 組み込みコマンドを参照してくだ さい。
tcsh シェルは、変数のリストを保守します。それぞれの変数は、値とし て 0 個以上のワードから成るリストを持っています。 tcsh シェル変数の値は、set および unset コマ ンドを使って表示したり、変更したりできます。 システムは独自の「環境」変数リストを保守しています。 それらの変数リストは、printenv、setenv およ び unsetenv を使って表示したり、変更したりできます。
変数は set -r を使って読み取り専用にすることができます。 読み取り専用変数は、変更したり、設定解除したりすることができませ ん。もしそうしようとすると、エラーが起こります。 変数をいったん読み取り専用にすると、書き込み可能にすることができなく なります。ですから set -r は注意して使用する必要があります。 環境変数は読み取り専用にすることはできません。
一部の変数は、tcsh シェルが設定したり、参照したりします。 例えば、argv 変数はシェルの引数リストの イメージであり、この変数の値のワードは特別な仕方で参照されます。tcsh シェルが参照する変数のいくつかはトグルですが、シェルは トグルが設定されているかどうかを見るだけであり、どんな値であるかにつ いては注意しません。例えば、verbose 変数は、コマンド入力がエコーされ るようにするトグルです。 -v コマンド行オプションがこの変数を設定します。特殊なシェル変数は、シェルが参照するすべての変数をリストします。
その他の操作では、変数を数値的に処理します。 @ (at) コマンドを使用すると、数値計算を実行でき、また その結果を変数に割り当てることができます。 しかし、変数の値は常に (0 個以上の) ストリングとして表現されます。 数値的な操作を行うという目的のため、ヌル・ストリングはゼロと みなされ、複数ワードからなる値の 2 番目以降のワードは無視されます。
入力行に別名が割り当てられて解析された後、各コマンドの実行に先立って、$ 文字で入力された変数置換が実行されます。この展開は $ の前に ¥ を付 けることによって抑制することができますが、次のような例外があります。すなわち、二重引用符 (") で囲まれている場合には展開は常に行われ、単一引用符 ( ' ) で囲まれている場合には展開は絶対に行われません。開き引用符または抑音符号 (`) を使って引用されたストリングは、後で 解釈されます (コマンド置換を参照)。このため、$ の置換は 行われるとしても、後でなければそこでは行われません。 ブランク、タブ、または行の終わりが後に続いている場合には、$ は未変更のまま渡されます。
入出力のリダイレクトは変数展開の前に認識され、そして別個に展開 されます。それ以外の場合、コマンド名と引数リスト全体は一緒 に展開されます。 ですから、(ここまでの) 最初の (コマンド) ワードは複数のワードを生成することが 可能であり、その最初のワードがコマンド名になり、残りのワードが引数になります。
二重引用符 (") で囲まれていないか、あるいは :q 変更子が与えられて いない限り、変数置換の結果は最終的には置換されたコマンドとファ イル名になります。" で囲まれている場合、複数のワードからなる値を持つ変数は、単一 ワード (の一部) に展開され、変数の値のワードはブランクで区切られます。:q 変更子が置換に適用された場合、変数は複数のワードに展開されますが、それぞれのワードはブランクで区切られ、後でコマンドまたはファイル名置換が行われないように引用符で囲まれます。
これまでに述べた置換以外の置換は、tcsh 組み込みコマンドの引数に選択 的に適用されます。つまり、式において評価されない部分については展開は行われません。 tcsh シェルの内部コマンドではないコマンドについては、コマンド名は別個に引数リストから置換が行われます。 これは、入出力リダイレクトが行われた後、メイン・シェルの子で 非常に遅く行われます。
コマンド置換はコマンドを ' ' ' で囲んで示します。 そのようなコマンドからの出力は、ブランク、タブおよび改行の位置で個々 のワードに分割され、ヌル・ワードは廃棄されます。 その出力は、変数および置換されたコマンドであり、元のストリングの代わりに 挿入されます。
二重引用符 ( " ) の中のコマンド置換子はブランクとタブを保存しますが、改行だけは新しいワードを強制的に生成します。 最後の単一の改行は、どんな場合にも新しいワードを生成しません。 ですから、コマンド出力が完全な行であっても、コマンド置換によって ワードの一部しか生成されないことがあり得ます。
あるワードが、'*'、'?'、'[' または '{' のいずれかの文字を含んで いるか、あるいは文字 '~' で始まっている場合、それはファイル名の 置換候補となります。これはワイルドカードとも 呼ばれています。そのワードはパターン (グロブ・パターン) と見なされ、そのパターンと一致するファイル名の英字順ソート・リストに置き換えられます。
ファイル名のマッチングの際に、 文字 . (ピリオド) は、文字/と同様に明示的に一致する必要があります。文字 * は、ヌル・ストリングを含め、どのストリング とも一致します。文字 ? はすべての単一の文字に一致します シーケンス […] は囲まれた文字のうちの任意のものと一 致します。[…] 内の - で区切られた文字の対は、その 2 つの文字の間にある任意の文字と語句として一致します。
一部のグロブ・パターンは否定できます。 すなわち、シーケンス [^…] は、中括弧内の文字や文字範囲によって指定されていない任意の単一文字と一致します。
> echo *
bang crash crunch ouch
> echo ^cr*
bang ouch
'?'、'*' または '[]' のいずれも使用していないグロブ・パターン、あるいは '{}' または '^' を使用しているグロブ・パターンは正し
く否定されません。メタ表記 a{b,c,d}e は abe 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 の pushd、popd およ び dirs 組み込みコマンドが使用するものです。dirs は、ディレクトリー・スタックの出力、ファイルへの保管、復元、および消去を、いつでも行うことができます。また savedirs および dirsfile シェル変数を設定すれば、ログアウト時にディレクトリー・ スタックが自動的に保管されたり、ログオン時にそれが復元されるように することができます。 dirstack シェル変数を調べればディレクトリー ・スタックを見ることができ、またこのシェル変数を設定すれば任意のディ レクトリーをディレクトリー・スタックに入れることができます。
> 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 特殊別名を設定して、シェルそのもの以外の インタープリターを指定することもできます。
コマンドの標準入力および標準出力は、 表 1 に示されている以下の構文でリダイレクトすることができます。
構文 | 説明 |
---|---|
< name | 標準入力であるファイルの名前 (展開された最初の変数、コマンドおよび ファイル名) を開きます。 |
<< word | word と同じ行までのシェル入力を読み取ります。 word は、変数置換、ファイル名置換またはコマンド置換の対象とはさ れず、それぞれの入力行はこの入力行で置換が行われる 前に word と比較されます。引用記号 ¥、" 、' ' または ' ' ' が word 内に含まれてい るのでない限り、間にある行で変数およびコマンド置換が実行され、¥ で $、¥ および ' (単一引用符) を引用する ことができます。置換されるコマンドでは、最後の改行を除くすべてのブランク、タブ、および改行が維持され、最後の改行だけは除去されます。 結果として得られるテキストは無名ファイルに入れられ、そのファイルは 標準入力としてコマンドに渡されます。 |
> name |
ファイル name が標準出力として使用されます。
そのファイルが存在しない場合には、それは作成されます。そのファイルが
存在する場合には、それは上書きされて以前の内容は失われてしまいます。 シェル変数 noclobber が設定されていると、そのファイルは存在できないかまたはキャラクター・スペシャル・ファイ ル (例えば、端末かまたは /dev/null) でなけれ ばなりません。そうでないとエラーになります。 この設定は、誤ってファイルが破壊されるのを防ぐのに役立ちます。この場合、! 形式を使用してこの検査を抑制することができます。 & (アンパーサンド) を含んでいる形式は、診断出力を、標準出 力だけでなく指定のファイルにも送ります。 name は、< 入力ファイル名の場合と同じように展開されます。 |
>> name |
> と似ていますが、出力を name の最後に付加するという点で異な ります。シェル変数 noclobber が設定されていると、ファイルが存在しないなら エラーになります。ただし、! 形式の場合にはエラーになりません。 |
コマンドは、シェルが起動された環境を受け取りますが、その環境は 入出力パラメーターにより、またパイプラインに含まれていたその コマンドにより変更されたものです。ですから、以前の一部のシェルとは異なり、シェル・コマンドのファイルか ら実行されるコマンドは、デフォルトではコマンドのテキストを使用できませ ん。コマンドはシェルの元の標準入力を受け取ります。 インライン・データを提供するには << メカニズムを使用して ください。これを使用すると、シェル・コマンド・スクリプトはパイプライ ンのコンポーネントとして機能できるようになり、シェルは入力のブロック 読み取りを行うことができます。切り離して実行されるコマンドのデフォルト標準入力は、空ファイル /dev/null ではなく、シェルの元の標準入力です。その標準入力が端末であり、プロセスがその端末から読み取ろうとする 場合、プロセスはデータをブロック形式で記録し、そのことがユーザーに通知 されます (ジョブを参照)。
診断出力は、標準出力と一緒にパイプを介して送ることができます。単なる | ではなく、|& 形式を使用するだけで行うことができます。
現在のところ、シェルは標準出力もリダイレクトしなければ、診断出力をリ ダイレクトすることはできません。しかし、(command > output-file) >& error-file はしばしばその抜け道として 受け入れられています。出力を端末に送るには、output-file または error-file のいずれか を /dev/tty にすることができます。
シェルがどのようにコマンド行を受け入れて、解析し、実行するかにつ いて説明してきましたが、次に種々の便利な機能に目を向けてみましょう。
tcsh シェルは、コマンド・ファイル (シェル・スクリプト) 内の、また端末 出力からの (役立つ仕方で制限された) 制御の流れを調整するのに 使用できるいくつかのコマンドを含んでいます。 それらのコマンドはすべて、シェルに強制的にその入力の中で再読み取り またはスキップさせたり、実装のために一部のコマンドの配置を制限 させることにより、動作します。
foreach ステートメント、switch ステートメント、および while ステートメント、ならびに if ステートメント の if-then-else ステートメントでは、入力行の単一の単純コマンドの中に主要なキーワ ードを指定する必要があります。
シェルの入力が検出できない場合、シェルはループが読み取られるときには いつでも入力をバッファーに入れ、この内部バッファー内で検出を実行して、ループが示唆する再読み取りを実行します。 (これが可能な範囲内では、逆方向 goto は検出不能入力に対して成功しま す。)
if、while、および exit の各組み込み コマンドは共通構文を持つ式を使用します。 この式には、続く 3 つのトピックで説明しているどの演算子でも含め ることができます。 @ 組み込みコマンドは独自の別個の構文を持っていることに注意 してください。
|| && | ^ & == != =~ !~ <= >=
< > << >> + - * / % ! ~ ( )
ここで優先順位は右に行くほど高くなります。
'==' '!=' '=~' および '!~' '<=' '>=' '<'
および '>' '<<' および '>>' '+' および '-' '*' / および '%' は同じレベルのグループです。'==' '!=' '=~' および '!~' 演算子はそれぞれの引数をストリング
として比較し、その他の演算子は数字に対して演算を行います。
演算子 '=~' および '!~' は '!=' および '==' と似てい
ますが、右側がグロブ・パターン (ファイル名の置換を参照) であり、左側のオペランドがそれとマッチングさせられるという点で違っています。
実際に必要なことがパターン・マッチングだけである場合には、これにより、シェル・スクリプトの中で switch 組み込みコ
マンドを使用する必要性が少なくなります。0 で始まるストリングは 8 進数と見なされます。 ヌルの場合または引数がない場合は 0 と見なされます。すべての式の結果はストリングで、これは 10 進数を表します。同じワードの中に 式の 2 つのコンポーネントがあってはなりません。 ただし、それらのコンポーネントが、パーサーにとって構文上重要となる式のコンポーネント ('$' '|' '<' '>' '(' ')') に隣接している場合を除きます。 その場合は、それらのコンポーネントをスペースで囲む必要があります。
コマンドは中括弧 ({}) で囲めば式の中で実行することができ、それらの出口状況が戻されます。中括弧は、コマンドのワードとスペースで分離する必要があります。 コマンドが状況 0 で終了した場合には、コマンドの実行は正常 に行われ、真 (すなわち 1) が戻され、それ以外の状況である 場合にはコマンドの実行は失敗し、偽 (0) が戻されます。もっと詳しい状況情報が必要な場合には、コマンドを式の外側で実行し、status シェル変数を調べる必要があります。
これらの演算子は簡単にするために組み合わせることができ、–xy file は –x file && –y file と 同等です。例えば、–fx はプレーン実行可能ファイルについては真です (1 を戻します) が、 ディレクトリーについては真ではありません。
L は、複数演算子テストで使用して、後続の演算子をシンボリック・ リンク (リンクが指し示すファイルではなく) に適用することができます。例えば、-lLo は、 呼び出し側のユーザーが所有するリンクについては真です。Lr、Lw、および Lx はリンクについては 常に真であり、リンク以外については偽です。L は、複数演算子テストの中の最後の演算子であるときには、別 の意味を持ちます。
file がファイルであることを予期する演算子を、そのように予期しない演算 子と組み合わせること (例えば、X と t) は可能ですが、実用的 ではありません。むしろ、場合によっては誤った結果にいたることがあります。L の後に非ファイル演算子を続けると、特に予想外の結果になることが あります。
ファイル照会演算子は、filetest 組み込みコマンドでも評価する ことができます。
if ( -T file == IBM-1047 ) #True if tagged as IBM-1047 text
if ( -B file ) #True if tagged as binary
[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 のように指定 することができます。単にジョブを指定した場合、そのジョブはフォアグラウンド で実行されます。%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 回目の警告は出さず、延期されていたジョブは終了します。
シェルのライフ・サイクルの中で、いろいろな時間に 自動的にコマンドを実行して他のアクションを実行するさまざまな方法があ ります。
システムの多文化サポートを使用すると、setlocale 関数が呼び出されて、該当する文字種別とソートが判別されます。 この関数は、通常は LANG および LC_CTYPE 環境変数を調べます。詳細は、システムの資料を参照してください。
不明の文字 (出力可能でも制御文字でもない文字) は ¥nnn 形式で出力されます。
version シェル変数は、シェルのコンパイル時に選択されたオプションを示 します。newgrp 組み込みコマンドおよび echo_style シェル変数、そしてシェルの入力ファイルの場所 (tcsh ファイルを参照) にも注意してください。
ログイン・シェルは、ファイル ~/.logout を読み取るときには 割り込みを無視します。 シェルは、-q 付きで開始されていない限り、終了 (quit) シグナル を無視します。 ログイン・シェルは終了 (terminate) シグナルを取り込みますが、非ログイン・ シェルは自分の親から終了動作を継承します。 その他のシグナルは、シェルがその親から継承した値を持ちます。
シェル・スクリプトでは、シェルによる割り込みシグナルおよび 終了 (terminate) シグナルの処理は onintr で制御することができ、ハングアップの処理は hup および nohup で制御する ことができます。
ハングアップ時にはシェルは終了します (logout シェル変数も参照)。 デフォルトでは、シェルの子も終了しますが、シェルは終了時に子に対して ハングアップを送信しません。hup を使用すると、シェルの終了時にシ ェルが子にハングアップを送信するようになり、nohup を設定すると子はハングアップを無視するようになります。
シェルは edit、quote、execute という 3 種類の端末 (tty) モードを使用 します。edit は編集時に使用され、quote はリテラル文字を引用するときに使用され、execute はコマンドの実行時に使用されます。 シェルは各モードのいくつかの設定値を一定に保つので、tty を一致しない状態のままにして残すコマンドでもシェルを妨害しません。 シェルは、tty のスピードや埋め込みの変更とも調和します。 一定に保たれる tty モードのリストは、組み込み setty で 調べたり、変更したりできます。 エディターは CBREAK モード (またはそれに相当するもの) を使用しますが、それでも先行入力文字をとります。
echotc、settc および telltc コマンドを使用 すると、コマンド行から端末機能を操作およびデバッグすることができます。
tcsh シェルはウィンドウのサイズ変更に自動的に順応し、環境変数 LINES および COLUMNS が設定されている場合にはそれらを調整します。
以下の表に、tcsh組み込みコマンドを示します。これらは /bin/sh 組み込みコマンドではありません。
@ (at) | filetest | notify | source |
% | glob | onintr | telltc |
alloc | hashstat | popd | uncomplete |
bindkey | hup | pushd | unhash |
builtins | limit | rehash | unlimit |
bye | log | repeat | unsetenv |
chdir | login | sched | watchlog |
complete | logout | setenv | where |
dirs | ls-F | settc | which |
echotc | notify | setty |
その他の tcsh 組み込みコマンドも z/OS シェルにはあります。 場合によっては、それらは機能が異なることがあります。 tcsh バージョンのコマンドの解説については、各コマンドの説明 を参照してください。
: (コロン) | continue | fg | nice | stop | unset |
alias | echo | history | nohup | suspend | wait |
bg | eval | jobs | printenv | time | writedown |
break | exec | kill | set | umask | |
cd | exit | newgrp | shift | unalias |
> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd ^G"'
を実行した場合、シェルは、実行中の xterm のタイトルをホストの名前、コロン、および
絶対パス名で表された現行作業ディレクトリーになるように変更します。
これを行うもっと凝った方法は次のようなものです。> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"'
この場合、
ホスト名と作業ディレクトリーはタイトル・バーに表示されますが、ホスト名のみはアイコン・マネージャー・メニューに表示されます。
cd、pushd または popd を cwdcmd に入れると、無限ループに入る可能性があります。 > set tperiod = 30
> alias periodic checknews
checknews プログラムが 30 分ごとに実行されます。
periodic が設定されていても tperiod が設定されていない場合または 0 に設定されている場合、periodic は precmd と同じように働きます。> alias precmd date
date は、シェルが各コマンドの入力を促す直前に実
行されます。precmd を設定して何を行うことができるかについて
制限はありませんが、判断力を働かせる必要があります。構成 | アクション |
---|---|
breaksw | switch から break が出され、endsw の後 再開されます。 |
case label | switch 内のラベル。switch の説明を参照してください。 |
continue | 最も近い while または foreach ループの 実行を継続します。現在行の残りのコマンドが実行されます。 |
default | switch ステートメントの中のデフォルト case にラベルを付けます。これは、すべての case ラベルの後にくる必要があります。 |
else |
この後に示されている foreach、if、switch、およ び while ステートメントの説明を参照してください。 |
goto word | goto では、word はファイル名およびコマンドであり、置換されて形式 label のストリングになります。tcsh シェルは可能な限りその入力の前の部分に戻り、形式 label (おそ らくブランクまたはタブがその前にある) の行を探し、その行の後から実行を 継続します。 |
foreach |
変数名をワード・リストの各メンバーに逐次設定してゆき、このコマンドとこれに対応する end との間にある一連のコマンドを実行します。 (foreach と end はどちらも単独で別々の行に指定する必要があります。)組み込みコマンド continue を使用すればループを早めに続行でき 、組み込みコマンド break を使用すればループを早めに終了する ことができます。このコマンドが端末から読み取られる場合、ループ内の文が実行される 前に foreach? (または prompt2) で入力が促されるとすぐにこのループが読み取られます。 端末でループの中の項目をタイプミスをした場合には、それを取り消すことが できます。 |
if (expr) then |
指定された expr が真である場合、最初の else の コマンドが実行されます。そうではなく、expr2 が真である場合に は、2 番目の else のコマンドが実行されます。 else-if の対はいくらでも指定できますが、必要な endif は 1 つだけです。 else 部分はオプショナルです。(ワード else および endif は入力行の先頭に指定しな ければなりません。if はその入力行に、または else の 後に、単独で指定する必要があります。) |
switch (string) |
それぞれの case ラベルは、展開される最初のコマンドおよびファイル名で ある指定された string と順次にマッチングされます。 ファイルのメタキャラクター *, ? および […] は、変数展 開が行われる case ラベルの中で使用できます。 default ラベルが検出される前にいずれのラベルも一致しない 場合には、実行は default ラベルの後から開始されます。それぞれの case ラベルおよび default ラベルは、行の 先頭に指定する必要があります。コマンド breaksw により、endsw の後実行が継続されます。これ以外の場合には、C の場合のように制御は case ラベルおよ び default ラベルには流れません。一致するラベルがなく、default もない場合、endsw の後で 実行が継続されます。 |
while (expr) |
expr (式) がゼロ以外の値に評価される限り、while とそ れに対応する end の間のコマンドを実行します。while と end は入力行に単独で指定する必要があります。 break および continue を使用すれば、ループを早めに 終了したり、継続したりできます。入力が端末からの場合には、foreach の場合のように最初にループ に入るときにユーザーは入力を促されます。 |
ここで説明する変数は、tcsh シェルにとって特別な意味があります。 tcsh シェルは、開始時に addsuffix、argv、autologout、command、echo_style、edit、gid、group、home、loginsh、path、prompt、prompt2、prompt3、shell、shlvl、tcsh、term、tty、uid、user、およ び version を設定します。 これらは、ユーザーが変更しない限り、これ以降変更されません。 tcsh シェルは、必要に応じて cwd、dirstack、owd、および status を更新し、ログアウト時 に logout を設定します。
シェルは、group、home 、 path、shlvl、term、および user を同じ名前の環境変数と一致させます。環境変数が変更されると、シェルは (シェル変数が読み取り専用でない限り) 必ず対応するシェル変数を変更して一致させます。逆の場合も同様です。 cwd と PWD は同じ意味を持っていますが、このような仕方では一致させられません。
シェルは、path および PATH の異なる形式を自動的に相互変換します。
変数 | 目的 |
---|---|
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 に設定した場合、補完機能は最初、大文字 小文字を無視し、次にピリオド、ハイフンおよび下線 ('.'、'-' および '_') をワード・セパレーターとみなし、ハイフンと下線を同じものとみなし ます。 |
correct | cmd に設定した場合、コマンドは自動的にスペル 訂正が行われます。complete に設定した場合、コマンドは自動的に 補完されます。all に設定した場合、コマンド行全体が訂正されます。 |
cwd | 現行ディレクトリーの絶対パス名。dirstack およ び owd シェル変数も参照してください。 |
dextract | この変数を設定した場合、pushd +n は n 番目のディレクトリーを、ディレクトリー・スタックの最上部に回すのでは なく、そこから抽出します。 |
dirsfile | dirs -S および dirs -L がヒストリー・ファイルを探す
デフォルトの場所。設定しなかった場合は、 ~/.cshdirs が使用されます。
通常は、 ~/.cshdirs の前
に ~/.tcshrc だけが検索場所になるので、dirsfile は ~/.login ではなく ~/.tcshrc の
中に設定する必要があります。 例えば、以下のとおりです。
|
dirstack | ディレクトリー・スタック上のすべてのディレクトリーの配列。 $dirstack[1] は現行作業ディレクトリー、$dirstack[2] はスタック上の最初のディレクトリーという具合に なります。現行作業ディレクトリーは $dirstack[1] ですが、デ ィレクトリー・スタック置換では =0 になることに注意してください。dirstack を設定すれば自由にスタックを変更 できますが、最初のエレメント (現行作業ディレクトリー) は常に正しいものです。 cwd および owd シェル変 数も参照してください。 |
dunique | この変数を設定した場合、pushd はスタックから name のインスタンスを除去してから これをスタックに入れます。 |
echo | この変数を設定した場合、引数を持つそれぞれのコマンドは実行される直前にエコー されます。非組み込みコマンドの場合、展開はすべてエコーの前に行われ ます。組み込みコマンドは、コマンドおよびファイル名の置換の前にエコ ーされます。それらの置換がその後選択的に実行されるからです。 -x コマンド行オプションで設定します。 |
echo_style | 組み込み echo のスタイル。次のものに設定できます。
この変数の使用例を以下に示します。
|
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 の中に
設定する必要があります。 例 :
|
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、a または A、あるい はそれらの任意の組み合わせ (例えば、xA) に 設定した場合、これは ls-F のフラグとして使用され、それは ls -xF、ls -Fa、ls -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 シェル変数も参照してください。 |
着信メールがあるかどうかを確認するためのファイルまたはディレクトリーの名前
で、ホワイト・スペースで区切られます。数値ワードが前に付
く場合があります。それぞれのプロンプトの前に、前回の確認以降 10 分が経過
している場合には、シェルは各ファイルを確認し、'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 環境変数からとって設定するか、 あるいは PATH がなければシステム依存の デフォルト (/usr/local/bin /usr/bsd /bin /usr/bin など) に設定されます。 シェルは、コンパイルが行われた方法に応じて、'.' を path の最初に置くか、 最後に置くか、あるいはそれをまったく省略します。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 に設定すると、
ヒストリー・リストは既存のヒストリー・ファイル (ある場合) と置き換わるの
ではなく、それとマージされます。そして、タイム・スタンプによってソート
され、最新のイベントが保持されます。 例 :
|
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 環境変数を参照) および
コンパイル時に設定されたオプションの (コンマで区切られた) リストを
含んでいます。配布時にデフォルトとして設定されているオプショ
ンにはそのことが示してあります。
|
visiblebell | 設定した場合、音響ベルではなく画面の明滅が使用されます。 nobeep を参照してください (現時点では実装 されていません)。 |
watch | ログインおよびログアウトについて監視するためのユーザー/端末の対のリ
スト。ユーザーが any の場合、指定されたユーザ
ーに関してすべての端末が監視されます。その逆も同様です。watch を
(any any) に設定すると、すべてのユーザーとす
べての端末が監視されます。例えば、以下のとおりです。
と指定すると、ttyd1 のユーザー george、console のすべてのユーザー、およびすべての端末の本人 (または不法侵入者) の活動が報告されます。デフォルトでは、ログインとログアウトは 10 分ごとに検査されますが、watch の最初のワードを数値に設定すれば、その分数ごとに検査を行うこと
ができます。例えば、以下のとおりです。
と指定すると、1 分ごとにすべてのログイン/ログアウトが報告されます。報告
を待てない場合は、log 組み込みコマンドを使用していつでも監視報
告を得ることができます。
watch を最初に設定したときには、(組み込み log の場合と
同様に) すべての現行ログインが報告されます。who シェル変数は、監視報告の形式を制御します。 |
who | 監視メッセージの書式制御ストリング。
以下のシーケンスは、示されている情報に置き換えられます。
|
wordchars | forward-word、backward word などのエディター・コマンドによってワードの一部とみなされる非英数字のリスト。設定しなかった場合は、*?_-.[] ~= が使用されます。 |
表 2 で説明されていない tcsh シェル変数を以下で説明します。
>set prompt = "%m [%h] %B[%@%b [%/] you rang?"
tut [37] [2:54] [/usr/accts/sys] you rang? _
対話式シェルにおいてはデフォルトでは %# に設定されます。 > 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 展開は、Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww
表 3 には、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 エディター・コマンドを参照してください。 |
TXTFLAG = ON、CCSID = 既存のファイル・タグ CCSID
CCSID = 0 の場合、効果はありません。
TXTFLAG = OFF、CCSID = 既存のファイル・タグ CCSID
これにより、自動変換が使用不可となります。
TXTFLAG = ON、CCSID = 最初の書き込み時点の プログラム CCSID (まだタグ付けされていない場合)
TXTFLAG = OFF、CCSID = 最初の書き込み時点の プログラム CCSID (まだタグ付けされていない場合)
TXTFLAG = ON、CCSID = 最初の書き込み時点の プログラム CCSID (まだタグ付けされていない場合)
TXTFLAG = OFF、CCSID = 最初の書き込み時点の プログラム CCSID (まだタグ付けされていない場合)
(set _TAG_REDIR_OUT=TXT; command >file)
これらのシェル変数は、パイプライン・コマンドでも使用できます。例えば、これらの変数を使用して、パイプラインに書き出す各コマンドの標準出力またはパイプラインから読み込む各コマンドの標準入力にタグ付けすることができます。
中断されたコマンドが再開されたときに、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)、alias、bg、break、cd、continue、echo、eval、exec、exit、fg、history、jobs、kill、newgrp、nice、nohup、printenv、set、shift、stop、suspend、time、umask、unalias、unset、wait