tcshマニュアルとサンプルコード
目次
名前(Name)
tcsh - ファイル名補完およびコマンドライン編集機能を持つCシェル
概要(Synopsis)
tcsh [-bcdefFimnqstvVxX] [-Dname[=value]] [引数 ...]tcsh -l
説明(Description)
tcshは、Berkeley UNIXのCシェルであるcsh(1)の拡張版で、完全に互換性があります。
インタラクティブなログインシェルとしても、シェルスクリプトのコマンド処理プログラムとしても使用できるコマンド言語インタプリタです。
tcshには、コマンドラインエディタ(The command-line editorを参照)、プログラム可能な単語補完(Completion and listingを参照)、スペル補正(Spelling correctionを参照)、履歴機構(History substitutionを参照)、ジョブ制御(Jobsを参照)、C に似た構文が含まれています。
新機能(NEW FEATURES)セクションでは、tcsh がcsh(1)に対して提供する主要な拡張機能を説明しています。
このマニュアル全体で、ほとんどのcsh(1)実装(特に4.4BSD csh)にはない tcsh の機能には「(+)」が付けられ、csh(1)にはあるが通常文書化されていない機能には「(u)」が付けられています。
引数リストの処理(Argument list processing)
シェルへの最初の引数(引数0)が - の場合、それはログインシェルを意味します。
ログインシェルは、-l フラグを唯一の引数として指定することでも指定できます。
残りのフラグ引数は以下のように解釈されます:
-b
オプション処理から「break」を強制し、それ以降のシェル引数はオプション引数ではなく非オプション引数として扱われます。残りの引数はシェルオプションとして解釈されなくなります。このオプションは、シェルスクリプトにオプションを渡す際に、混乱や不正な操作を避けるために使用できます。このオプションがない場合、シェルはセットユーザーID(set-user ID)スクリプトを実行しません。
-c
コマンドは次の引数から読み込まれ(この引数は必ず存在し、単一の引数である必要があります)、commandシェル変数に格納されて参照され、実行されます。残りの引数は、argvシェル変数に格納されます。
-d
シェルは、ログインシェルかどうかにかかわらず、~/.cshdirs からディレクトリスタックを読み込みます(Startup and shutdownを参照)。(+)
-Dname[=value]
環境変数 name を value に設定します。(Domain/OSのみ)(+)
-e
シェルは、実行されたコマンドが異常終了するか、非ゼロの終了ステータスを返した場合に終了します。
-f
シェルは、リソースファイルやスタートアップファイルを読み込まず、コマンドハッシュも行わないため、起動が速くなります。
-F
シェルは、プロセスを生成する際に vfork(2) の代わりに fork(2) を使用します。(+)
-i
シェルはインタラクティブモードで動作し、入力が端末でない場合でもトップレベルの入力をプロンプトします。このオプションがなくても、シェルは入力および出力が端末の場合、インタラクティブとして動作します。
-l
シェルはログインシェルです。-l が唯一のフラグとして指定された場合にのみ適用されます。
-m
シェルは、実行ユーザーに属していなくても ~/.tcshrc を読み込みます。新しいバージョンの su(1) は -m をシェルに渡すことができます。(+)
-n
シェルはコマンドを解析しますが、実行はしません。これはシェルスクリプトのデバッグに役立ちます。
-q
シェルは SIGQUIT を受け入れ(Signal handlingを参照)、デバッガの下で使用された場合に適切に動作します。ジョブ制御は無効になります。(u)
-s
コマンド入力は標準入力から取得されます。
-t
シェルは1行の入力を読み込み、実行します。この行の末尾で改行をエスケープするために \ を使用することができ、その場合は別の行に続けて入力を続けることができます。
-vverbose シェル変数を設定し、履歴置換後にコマンド入力をエコーします。
-xecho シェル変数を設定し、コマンドが実行される直前にコマンドをエコーします。
-Vverbose シェル変数を、~/.tcshrc を実行する前から設定します。
-X-xと同様に動作します(-V が -v であるのと同様)。
--help
標準出力にヘルプメッセージを表示し、終了します。(+)
--version
標準出力にバージョン、プラットフォーム、コンパイルオプションを表示し、終了します。この情報は version シェル変数にも含まれています。(+)
フラグ引数の処理が終わった後、引数が残っていて、かつ -c、-i、-s、-t のいずれのオプションも指定されていなかった場合、最初の引数は実行するコマンドのファイル名、または「スクリプト」として解釈されます。シェルはこのファイルを開き、その名前を $0 による再置換のために保存します。多くのシステムでは、標準のバージョン6またはバージョン7のシェルを使用しており、そのシェルスクリプトはこのシェルと互換性がないため、シェルはファイルの最初の文字が # でない(コメントで始まらない)スクリプトを実行するために「標準」シェルを使用します。
残りの引数は argv シェル変数に格納されます。
スタートアップとシャットダウン(Startup and shutdown)
ログインシェルは、まずシステムファイル /etc/csh.cshrc と /etc/csh.login からコマンドを実行します。
その後、ユーザーのhomeディレクトリにあるファイルからコマンドを実行します:最初に ~/.tcshrc(もし見つからなければ ~/.cshrc)、
次に ~/.history(または histfile シェル変数の値)、
その後 ~/.login、そして最後に ~/.cshdirs(または dirsfile シェル変数の値)を実行します(+)。
シェルは、/etc/csh.login を /etc/csh.cshrc の前に、または ~/.login を ~/.tcshrc や ~/.cshrc、~/.history の後に読み込むことがあります。
もしそのようにコンパイルされていれば、これらの設定は version シェル変数で確認できます。(+)
非ログインシェルは、スタートアップ時に /etc/csh.cshrc と ~/.tcshrc または ~/.cshrc のみを読み込みます。
スタートアップファイルの例については、http://tcshrc.sourceforge.net を参照してください。
stty(1) や tset(1) のような、ログイン時に1回だけ実行すればよいコマンドは、通常 ~/.login ファイルに記述します。
csh(1) と tcsh の両方で同じ設定ファイルを使用したいユーザーは、tcsh専用のコマンドを使用する前に tcsh シェル変数(詳細は q.v.)の存在を確認するだけの ~/.cshrc を作成することができます。
または、~/.cshrc と ~/.tcshrc の両方を持ち、~/.cshrc を読み込むようにすることもできます(builtin コマンドを参照)。
このマニュアルでは、~/.tcshrc が存在しない場合に ~/.cshrc を使うことを意味するため、~/.tcshrc を使う例が多く示されています。
通常の場合、シェルはターミナルからコマンドを読み込み、 > のプロンプトを表示します。
(引数の処理や、シェルがコマンドスクリプトを処理する方法については後述します。)シェルは繰り返しコマンド入力を1行読み込み、それを単語に分割し、コマンド履歴リストに追加し、それを解析して行の各コマンドを実行します。
シェルからログアウトするには、空行で ^D を入力するか、logout または login コマンドを入力するか、シェルの自動ログアウト機構(autologout シェル変数を参照)を使用する方法があります。
ログインシェルが終了すると、logout シェル変数が適切に normal または automatic に設定され、
その後 /etc/csh.logout および ~/.logout のファイルからコマンドが実行されます。
シェルは、コンパイルされていればログアウト時に DTR をドロップすることがあります。
詳細は version シェル変数を参照してください。
システムのログインおよびログアウトファイルの名前は、異なる csh(1) のバリエーションとの互換性を保つためにシステムによって異なる場合があります。詳細は「FILES」を参照してください。
編集(Editing)
まず、コマンドラインエディタ(The command-line editor)について説明します。
次に、補完とリスト(Completion and listing)およびスペル補正(Spelling correction)の各セクションで、
エディタコマンドとして実装されている2つの機能を説明しますが、これらは独立した説明が必要です。
最後に、エディタコマンド(Editor commands)のセクションで、シェルに特有のエディタコマンドと
そのデフォルトのバインディングをリストアップして説明します。
コマンドラインエディタ(The command-line editor) (+)
コマンドライン入力は、GNU Emacs や vi(1) で使用されるのと似たキーシーケンスで編集できます。エディタは、edit シェル変数が設定されているときにのみアクティブになり、インタラクティブシェルではデフォルトで設定されています。bindkey 組み込みコマンドを使用すると、キーのバインディングを表示したり変更したりできます。デフォルトでは Emacs スタイルのキー設定が使用されます(シェルが異なる方法でコンパイルされていない限り;詳細は version シェル変数を参照)。しかし、bindkey コマンドを使うことで、viスタイルのキー設定に一括で変更することもできます。
シェルは、常に矢印キー(TERMCAP 環境変数で定義されたもの)に次のコマンドをバインドします:
- 下矢印 → down-history
- 上矢印 → up-history
- 左矢印 → backward-char
- 右矢印 → forward-char
ただし、これらのバインディングを変更することが別の単一文字のバインディングを変更することにつながる場合は、
矢印キーのバインディングは行われません。
また、settc コマンドを使用して矢印キーのエスケープシーケンスを空文字列に設定することで、これらのバインディングを無効にすることもできます。
ANSI/VT100 シーケンスの矢印キーは常にバインドされます。
その他のキーのバインディングは、ほとんどの場合、Emacs や vi(1) のユーザーが期待するもので、
bindkey を使うと簡単に表示できますので、ここで一覧にする必要はありません。
同様に、bindkey はエディタコマンドの一覧と、それぞれの簡単な説明も表示できます。
なお、エディタコマンドにおける「単語(word)」の概念はシェルのそれとは異なることに注意してください。
エディタでは、単語を区切るのはシェル変数 wordchars に含まれていないアルファベットや数字以外のすべての文字です。
一方、シェルでは、単語を区切るのは空白文字と、シェルにとって特別な意味を持つ一部の文字(字句構造Lexical structure の項に記載)です。
補完とリスト(Completion and listing) (+)
シェルは、ユニークな省略形を入力すると、しばしば単語の補完ができます。例えば、ls /usr/lost のように単語の一部を入力し、タブキーを押すと、完全な単語が補完されます。シェルは、/usr/lost を /usr/lost+found/ に補完し、不完全な単語を完全な単語に置き換えます(この場合、末尾の / に注意してください)。補完は、ディレクトリ名の末尾に / を追加し、その他の単語の末尾にはスペースを追加して、タイピングを速くし、補完が成功したことを視覚的に示します。addsuffix シェル変数を無効にすることで、この動作を防ぐことができます。もし一致するものが見つからなければ(例えば、/usr/lost+found が存在しない場合)、ターミナルのベルが鳴ります。すでに完全な単語が入力されている場合(例えば、システムに /usr/lost が存在している場合や、考えすぎて完全に入力してしまった場合)、末尾に / またはスペースが追加されます(すでに付いていない場合)。
補完は行のどこでも機能し、単語の末尾だけでなく、補完されたテキストが行の右側に押し出されます。単語の中間で補完を行うと、カーソルの右側に残った文字が削除されることがあります。
コマンドや変数もほぼ同様に補完できます。例えば、em[tab] と入力すると、システム上に「em」から始まるコマンドが emacs のみであれば、em が emacs に補完されます。補完は、PATH内の任意のディレクトリにあるコマンドや、完全なパス名が与えられた場合にも機能します。例えば、echo $ar[tab] と入力すると、$ar が $argv に補完されます(ar で始まる他の変数がなければ)。
シェルは入力バッファを解析して、補完する単語がファイル名、コマンド、または変数のいずれであるかを判別します。バッファ内の最初の単語、および ;、|、|&、&&、|| の後に続く最初の単語はコマンドとして扱われます。$ で始まる単語は変数と見なされ、それ以外はファイル名と見なされます。空行はファイル名として補完されます。
単語の補完候補をリスト表示するには、いつでも ^D を入力して、delete-char-or-list-or-eof エディタコマンドを実行できます。シェルは、ls-F 組み込みコマンド(詳細は q.v.)を使用して、補完の候補をリスト表示し、プロンプトと未完成のコマンドラインを再表示します。例えば、次のようになります:
1> ls /usr/l[^D]
2lbin/ lib/ local/ lost+found/
3> ls /usr/l
もし autolist シェル変数が設定されていると、補完が失敗したときに残りの選択肢(もしあれば)を自動的にリスト表示します:
1> set autolist
2> nm /usr/lib/libt[tab]
3libtermcap.a@ libtermlib.a@
4> nm /usr/lib/libterm
autolist が ambiguous に設定されている場合、補完候補は、補完が失敗したときのみリスト表示され、補完される単語には新しい文字が追加されません。
ファイル名の補完には、変数やユーザー自身または他のユーザーのホームディレクトリを ~ で省略した形式(ファイル名の置換Filename substitutionを参照)、
ディレクトリスタックのエントリを = で省略した形式(ディレクトリスタックの置換Directory stack substitutionを参照)も使用できます。
例えば、次のように補完できます:
1> ls ~k[^D]
2kahn kas kellogg
3> ls ~ke[tab]
4> ls ~kellogg/
または、以下のように設定した変数を使って補完できます:
1> set local = /usr/local
2> ls $lo[tab]
3> ls $local/[^D]
4bin/ etc/ lib/ man/ src/
5> ls $local/
変数は、expand-variables エディタコマンドを使って明示的に展開することもできます。
delete-char-or-list-or-eof コマンドは、行の末尾でのみ補完候補をリスト表示します。行の中間では、カーソル下の文字を削除し、空行ではログアウトします(ignoreeof が設定されていれば、何もしません)。M-^D(エディタコマンド list-choices にバインドされている)は、行のどこでも補完候補をリスト表示します。また、list-choices(または、削除・リスト・ログアウトの動作をする関連エディタコマンド)は、必要に応じて bindkey 組み込みコマンドを使用して ^D にバインドすることができます。
complete-word-fwd および complete-word-back エディタコマンド(デフォルトではキーにはバインドされていません)は、補完候補リストを上下に循環させ、現在の単語をリスト内の次または前の単語に置き換えることができます。
シェル変数 fignore は、補完時に無視するサフィックスのリストを設定することができます。例えば、次のように設定した場合を考えます:
1> ls
2Makefile condiments.h~ main.o side.c
3README main.c meal side.o
4condiments.h main.c~
5> set fignore = (.o \~)
6> emacs ma[^D]
7main.c main.c~ main.o
8> emacs ma[tab]
9> emacs main.c
この例では、main.c~ と main.o は補完の対象から外れます(ただし、リスト表示には現れます)。
なぜなら、これらのファイル名は fignore に指定したサフィックス(.o と ~)で終わっているからです。
~ については、ファイル名置換の際にホームディレクトリとして展開されるのを防ぐために、\ を前に付けてエスケープしています。
ただし、fignore は、補完の候補が1つだけの場合には無視されません。
complete シェル変数が 'enhance' に設定されている場合、補完は次のように動作します:
- 大文字と小文字を区別しない
- ピリオド(
.)、ハイフン(-)、アンダースコア(_)を単語の区切りとして扱い、ハイフンとアンダースコアを同等とみなす
例えば、次のようなファイルがあるとします:
1comp.lang.c comp.lang.perl comp.std.c++
2comp.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] と入力した場合:
1A_silly_file a-hyphenated-file another_silly_file
補完は、3つのファイルすべてをリスト表示します。なぜなら、補完では大文字と小文字を区別せず、ハイフンとアンダースコアを同じものとして扱うためです。
ただし、ピリオド(.)はハイフン(-)やアンダースコア(_)と同等には扱われません。例えば、ピリオドが含まれる場合は、それが区切りとして補完されます。
補完とリスト表示は、いくつかのシェル変数によって影響を受けます。以下は、それらの変数とその動作です:
recexact: この変数を設定すると、補完は最短の一意の一致に基づいて行われ、追加の入力があっても長い一致に補完されることはありません。例えば、次のように入力した場合:1> ls 2fodder foo food foonly 3> set recexact 4> rm fo[tab]この時点では、
foという文字列がfodやfooなど複数の一致を持つため、シェルはビープ音を鳴らして補完を行いません。しかし、さらにoを入力すると:1> rm foo[tab] 2> rm foo補完は
fooに一致し、他の候補(foodやfoonly)は無視されます。autoexpand: この変数を設定すると、補完の前にexpand-historyエディタコマンドが自動的に実行されます。autocorrect: これを設定すると、補完前に単語のスペルが自動的に修正されます(スペル修正を参照)。correct: この変数を設定すると、returnキーを押した後にコマンドが自動的に補完されます。matchbeep: 補完候補が見つからなかった場合や、他の特定の状況でビープ音を鳴らすかどうかを制御します。これを設定することで、ビープ音が鳴るかどうかを調整できます。nobeep: これを設定すると、補完時にビープ音が一切鳴らなくなります。nostat: これを設定すると、指定したディレクトリやパターンに一致するディレクトリについて、補完機構がstat(2)を実行するのを防ぎます。これにより、ディレクトリの状態確認を避けることができます。listmaxとlistmaxrows: これらの変数を設定すると、リスト表示される項目数や行数を制限できます。制限を超えると、リスト表示を行う前に確認を求められます。recognize_only_executables: この変数を設定すると、シェルはコマンド補完時に実行可能なファイルのみをリスト表示しますが、動作が遅くなることがあります。
最後に、complete 組み込みコマンドを使うことで、ファイル名、コマンド、変数以外の単語の補完方法をシェルに指示することができます。
補完とリスト表示は、glob-patterns(ファイル名置換を参照)には対応していませんが、list-glob や expand-glob エディタコマンドは、グロブパターンに対して同等の機能を提供します。
スペル修正(Spelling correction)(+)
シェルは、ファイル名、コマンド名、変数名のスペルを補完やリスト表示とともに修正することがあります。
個々の単語は spell-word エディタコマンド(通常は M-s および M-S にバインド)で修正でき、入力全体は spell-line エディタコマンド(通常は M-$ にバインド)で修正できます。また、correct シェル変数を 'cmd' に設定するとコマンド名だけを修正し、'all' に設定すると、return キーが押されるたびにライン全体が修正されます。さらに、autocorrect を設定すると、補完前に単語のスペルが自動的に修正されます。
スペル修正が呼び出され、シェルがコマンドラインの一部が誤って入力されたと認識した場合、シェルは修正された行を提示します:
1> set correct = cmd
2> lz /usr/bin
3CORRECT> ls /usr/bin (y|n|e|a)?
ここで、次のように応答できます:
'y'またはスペース:修正された行を実行します。'e':修正されていないコマンドを入力バッファに残します。'a':^Cが押されたかのようにコマンドを中止します。- その他のキー:元の行を変更せずに実行します。
スペル修正は、ユーザー定義の補完(complete 組み込みコマンドを参照)にも対応しています。補完リストに一致する単語が入力された場合、その単語が誤字とみなされ、修正候補として提案されます。しかし、入力された単語がその位置に対する補完候補のいずれにも一致しない場合、スペル修正は誤字として認識しません。
補完と同様に、スペル修正は行内のどこでも機能し、行の残りの部分を右に押し出し、カーソルの右側に余分な文字を残すことがあります。
注意:スペル修正は必ずしも意図した通りに動作するとは限らず、主に実験的な機能として提供されています。改善案や提案は歓迎されています。
エディタコマンド(Editor commands)(+)
bindkey コマンドでキーのバインディングをリスト表示でき、bindkey -l でエディタコマンドとその簡単な説明を表示できます。ここでは、新しいエディタコマンドや特に興味深いものについて説明します。各エディタのキー操作の詳細については、emacs(1) や vi(1) を参照してください。
以下は、デフォルトで各コマンドにバインドされているキー操作(括弧内)です。^character は制御文字、M-character はメタ文字を意味し、メタキーのない端末ではエスケープ文字として入力します。大文字と小文字は区別されますが、デフォルトではアルファベットのコマンドは小文字と大文字両方にバインドされています。
主なエディタコマンド
complete-word (tab)
ファイル名やコマンド、変数などの補完を行います。補完の詳細は「補完とリスト表示」を参照してください。
complete-word-back (バインドなし)complete-word-fwd の逆で、補完リストの末尾から逆順に補完を進めます。
complete-word-fwd (バインドなし)
現在の単語を補完候補リストの最初の単語で置き換えます。リストの末尾に達するとビープ音が鳴り、元の単語に戻ります。
complete-word-raw (^X-tab)complete-word と似ていますが、ユーザー定義の補完を無視して補完を行います。
copy-prev-word (M-^_)
現在の行の前の単語を入力バッファにコピーします。insert-last-word と関連があります。
これらのコマンドは、シェルで効率よく編集作業を行うための便利な機能を提供します。補完を活用してコマンドの入力をスピードアップしたり、以前入力した単語を再利用することができます。
dabbrev-expand (M-/)
現在の単語を、履歴リストの中でその単語が接頭辞となっている最も最近の単語に展開します。履歴リストを一度だけ巻き戻して検索します。dabbrev-expand を繰り返すと、次の以前の単語へと移動し、同一の一致をスキップします。この動作は history-search-backward に似ています。
delete-char (バインドなし)
カーソルの下の文字を削除します。delete-char-or-list-or-eof でも使用されます。
delete-char-or-eof (バインドなし)
カーソル下の文字がある場合はそれを削除し、空行の場合は終端(EOF)と見なしてシェルを終了させます(ignoreeof シェル変数が設定されていない限り)。delete-char-or-list-or-eof とも関連します。
delete-char-or-list (バインドなし)
カーソル下に文字がある場合はそれを削除し、行末であれば list-choices コマンドを実行します。詳細は delete-char-or-list-or-eof を参照。
delete-char-or-list-or-eof (^D)
カーソル下に文字がある場合はそれを削除し、行末であれば list-choices を実行します。空行の場合は EOF(終端)としてシェルを終了します。これに関しては、それぞれのコマンド(delete-char、list-choices、eof)が単独で実行される場合もあります。
down-history (down-arrow, ^N)up-history の逆で、履歴リストを下に進めます。元の入力行に達するまで進みます。
end-of-file (バインドなし)
終了を示すためのコマンドで、シェルが ignoreeof シェル変数が設定されていなければシェルを終了させます。空行で実行された場合にEOFとして扱われます。delete-char-or-list-or-eof とも関連しています。
expand-history (M-space)
現在の単語で履歴の置換を展開します。履歴置換の詳細については「履歴の置換」セクションを参照してください。magic-space、toggle-literal-history、および autoexpand シェル変数とも関連しています。
expand-glob (^X-*)
カーソルの左側にあるグロブパターンを展開します。ファイル名の置換に関しては「ファイル名の置換」セクションを参照してください。
expand-line (バインドなし)expand-history と似ていますが、入力バッファ内の各単語に対して履歴置換を展開します。
これらのエディタコマンドは、シェルでの入力を効率よく編集し、履歴やファイル名の補完、置換操作を簡単に行うための便利なツールです。dabbrev-expand を使用すると、以前のコマンドのフラグメントを簡単に補完したり、delete-char-or-list-or-eof で空行やカーソル位置で複数の操作を統一的に実行できます。
expand-variables (^X-$)
カーソルの左側にある変数を展開します。変数の展開については「変数の置換」セクションを参照してください。これにより、変数の内容が補完され、変数名がその値に置き換えられます。
history-search-backward (M-p, M-P)
履歴リストを逆方向に検索し、入力バッファの内容(カーソル位置まで)で始まるコマンドを履歴から検索して、バッファにコピーします。検索文字列は、グロブパターン(ファイル名置換に使用される *、?、[]、{} など)を含むことができます。up-history と down-history は、履歴リスト内の適切なポイントから進行します。これはエマックスモード(Emacs mode)のみに対応しています。history-search-forward と i-search-back も関連するコマンドです。
history-search-forward (M-n, M-N)history-search-backward と似ていますが、履歴リストを前方向に検索します。
i-search-back (バインドなし)
履歴を逆方向に検索し、最初に一致した項目を入力バッファにコピーしてカーソルをパターンの末尾に位置させ、「bck: 」と最初の一致をプロンプトとして表示します。追加の文字を入力して検索を拡張することができ、i-search-backを再度入力することで、同じパターンで検索を続けることができます。履歴リストの先頭まで検索を巻き戻すことも可能です(これが機能するためには、i-search-backが単一の文字にバインドされている必要があります)。また、次の特殊文字を入力することもできます:
^W: カーソルの下にある単語の残りの部分を検索パターンに追加します。delete(またはbackward-delete-charにバインドされている任意の文字) : 最後に入力した文字の効果を元に戻し、適切な場合は検索パターンから1文字を削除します。^G: 前回の検索が成功していれば、検索全体を中止します。そうでなければ、最後の成功した検索に戻ります。escape: 検索を終了し、現在の行を入力バッファに残します。
その他、self-insert-commandにバインドされていない文字は検索を終了し、現在の行を入力バッファに残して、通常の入力として解釈されます。特に、キャリッジリターンは現在の行を実行します。 Emacsモード専用です。 また、i-search-fwdやhistory-search-backwardも参照してください。
i-search-fwd (バインドなし)i-search-back と似ていますが、履歴リストを前方向に検索します。i-search-back が後ろに検索するのに対し、i-search-fwd は検索を前に進めます。
insert-last-word (M-_)
最後に入力した行の最後の単語(!$)を現在の入力バッファに挿入します。copy-prev-word とも関連しています。
list-choices (M-^D)
現在の単語に基づいて補完可能な選択肢をリスト表示します。補完候補を確認できます。
list-choices-raw (^X-^D)list-choices と似ていますが、ユーザー定義の補完を無視してリスト表示を行います。
list-glob (^X-g, ^X-G)
現在カーソルの左側にあるグロブパターンに一致するファイルをリスト表示します。
list-or-eof (not bound)
空行であれば補完候補をリスト表示するか、EOF(ファイルの終わり)を処理します。
magic-space (not bound)
現在の行で履歴展開を行い、その後スペースを挿入します。デフォルトではバインドされていません。
normalize-command (^X-?)
現在の単語を PATH 内で実行可能なコマンドとして見つけた場合、そのフルパスに置き換えます。
normalize-path (^X-n, ^X-N)
現在の単語をシンボリックリンク展開設定に基づいてフルパスに展開します。
overwrite-mode (unbound)
入力モードと上書きモードを切り替えます。
run-fg-editor (M-^Z)
現在の入力行を保存し、EDITOR または VISUAL 環境変数のファイル名部分の最後のコンポーネントに一致する停止中のジョブを探します。もし該当するジョブが見つかれば、それを fg %job コマンドを入力したかのように再開します。これにより、エディタとシェルの間を簡単に行き来できます。一部の人は、このコマンドを ^Z にバインドして、さらに簡単に切り替えられるようにしています。
run-help (M-h, M-H)
現在のコマンドに関するドキュメントを検索し、表示します。ドキュメントは、command.help、command.1、command.6、command.8、または command というファイル名で、HPATH 環境変数にリストされたディレクトリのいずれかに存在する必要があります。複数のヘルプファイルがある場合は、最初のファイルのみが表示されます。
self-insert-command (text characters)
挿入モード(デフォルト)では、入力された文字をカーソルの位置の後に挿入します。上書きモードでは、カーソルの下の文字を入力された文字で置き換えます。入力モードは通常、行をまたいで保持されますが、inputmode シェル変数を insert または overwrite に設定することで、各行の開始時にそのモードにすることができます。overwrite-mode も参照。
sequence-lead-in (arrow prefix, meta prefix, ^X)
次に続く文字が複数キーのシーケンスの一部であることを示します。複数キーのシーケンスにコマンドをバインドする場合、最初の文字は 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 (any unbound key)
ビープ音を鳴らします。
up-history (up-arrow, ^P)
履歴リストの前のエントリを入力バッファにコピーします。histlit が設定されている場合、エントリのリテラル形式が使用されます。履歴リストを遡って、最上部で止まるまで繰り返し実行できます。
vi-search-back (?)
検索文字列(history-search-backward と同様にグロブパターンが使える)を尋ね、検索して一致する文字列を入力バッファにコピーします。一致しない場合はビープ音が鳴ります。リターンキーで検索を終了し、最後の一致を入力バッファに残します。エスケープキーで検索を終了し、一致する文字列を実行します。viモード専用。
vi-search-fwd (/)vi-search-back と似ていますが、前方方向に検索します。
which-command (M-?)
入力バッファの最初の単語に対して which コマンドを実行します(組み込みコマンドの説明を参照)。
yank-pop (M-y)
直前に yank または別の yank-pop を実行した後に実行すると、貼り付けた文字列をキルリング内の次の文字列に置き換えます。これによりキルリングが回転し、この文字列は後の yank コマンドで「最も最近キルされた」ものとして扱われます。yank-pop を繰り返すことで、キルリングを何度でも循環できます。
字句構造 (Lexical Structure)
シェルは入力行を空白とタブで単語に分割します。特別な文字 &, |, ;, <, >, (, ), および重複した文字 &&, ||, <<, >> は常に独立した単語として扱われ、空白に囲まれていなくても分割されます。
シェルの入力が端末でない場合、# 文字はコメントの開始として扱われます。この場合、# とそれ以降の行の内容は解析前に破棄されます。
特別な文字(空白やタブを含む)は、バックスラッシュ(\)で前置きするか、単一引用符(')、二重引用符(")、または逆引用符(`)で囲むことによって、特別な意味を持たないようにすることができます。この場合、特別な意味を持たず、他の単語の一部として扱われることがあります。改行文字も、バックスラッシュで前置きされた場合には空白と同じ意味になりますが、引用符内では改行がそのまま改行文字として扱われます。
さらに、すべての置換(以下参照)は、文字列(または文字列の一部)を単一引用符で囲むか、特定の文字(例えば、変数展開やコマンド置換のための $ や逆引用符)の前にバックスラッシュを付けることによって防ぐことができます。別名置換(エイリアスの展開)も例外ではなく、エイリアスが定義された単語の任意の部分を引用符で囲むことによってその置換が防がれます。エイリアスを引用する通常の方法は、バックスラッシュでその前に置くことです。ヒストリー置換はバックスラッシュで防ぐことができますが、単一引用符では防げません。二重引用符や逆引用符で囲まれた文字列は、変数置換やコマンド置換を行いますが、その他の置換は防がれます。
単一引用符または二重引用符で囲まれたテキストは、1つの単語(またはその一部)として扱われます。これらの文字列内のメタキャラクター(空白やタブを含む)は、別々の単語には分割されません。唯一の例外はコマンド置換(下記参照)で、二重引用符で囲まれた文字列が複数の単語に分割される場合がありますが、単一引用符ではそのようなことはありません。逆引用符は特別で、コマンド置換を示すために使われ、これによって複数の単語が得られることがあります。
複雑な文字列、特にその中に引用符を含む文字列を引用することは混乱を招くことがあります。引用符は人間の書き方のように使う必要はありません!文字列全体を引用するのではなく、引用が必要な部分だけを引用し、適切な方法で異なる種類の引用符を使う方が簡単な場合もあります。
backslash_quote シェル変数(後述)を設定すると、バックスラッシュが常に \、'、および " を引用するようになります(+)。これにより、複雑な引用作業が簡単になることがありますが、csh(1) スクリプトでは構文エラーを引き起こすことがあるので注意が必要です。
置換(Substitutions)
ここでは、シェルが入力に対して実行するさまざまな変換(置換)を、発生する順番で説明します。これらの置換に関わるデータ構造や、それらに影響を与えるコマンドや変数についても言及します。置換は、Lexical structure(字句構造)で説明したように、引用符を使って防ぐことができることを思い出してください。
履歴の置換(History substitution)
シェルは、ターミナルから入力された各コマンド(「イベント」)を履歴リストに保存します。前回のコマンドは常に保存され、history シェル変数を設定することで、指定した数だけコマンドを保存できます。histdup シェル変数を設定することで、重複するイベントや連続する重複イベントの保存を防ぐことができます。
保存されたコマンドは1から順番に番号が付けられ、実行時間がスタンプされます。通常、イベント番号を使う必要はありませんが、現在のイベント番号をプロンプトに含めることができ、これは prompt シェル変数に ! を入れることで実現できます。
シェルは実際に履歴を展開された形式とリテラル(展開されていない)形式で保存します。histlit シェル変数が設定されている場合、履歴を表示したり保存したりするコマンドはリテラル形式を使用します。
history 組み込みコマンドは、履歴リストを表示、ファイルに保存、復元、およびクリアすることができ、savehist と histfile シェル変数を設定することで、ログアウト時に履歴リストを自動的に保存し、ログイン時にそれを復元することができます。
履歴の置換は、履歴リストから単語を入力ストリームに挿入し、コマンドを繰り返したり、前回のコマンドの引数を現在のコマンドに使い回したり、前回のコマンドのスペルミスを少ない入力で修正したりするのに便利です。
履歴の置換は「!」で始まります。この文字は入力ストリームのどこにでも現れますが、入れ子にすることはできません。! の前にバックスラッシュ(\)を置くと、その特別な意味を防ぐことができます。便宜上、! は空白、タブ、改行、= または ( の後では変更されずにそのまま渡されます。履歴の置換は、入力行が ^ で始まる場合にも発生します。この特別な省略形については後で説明します。履歴置換を示すために使われる文字(! と ^)は、histchars シェル変数を設定することで変更できます。履歴置換を含む入力行は、実行される前に表示されます。
履歴置換のイベント指定
履歴置換には「イベント指定」があり、これはどのイベントから単語を取るかを示します。また、「単語指定」や「修飾子」が指定されている場合、選ばれた単語を操作することができます。
イベント指定には以下の形式があります:
n: 数字。特定のイベントを参照します。-n: オフセット。現在のイベントからn番目の前のイベントを参照します。#: 現在のイベントを参照します。これはcsh(1)では再帰に対するチェックがないため注意して使うべきです。tcshでは最大10回の再帰が許可されています。!: 前回のイベントを参照します(-1と同じ)。s: 文字列sで始まる直近のイベントを参照します。?s?: 文字列sを含む直近のイベントを参照します。2番目の?は改行直後に続く場合、省略できます。
例えば、以下のような履歴リストを考えます:
19 8:30 nroff -man wumpus.man
210 8:31 cp wumpus.man wumpus.man.old
311 8:36 vi wumpus.man
412 8:37 diff wumpus.man.old wumpus.man
コマンドはイベント番号とタイムスタンプとともに表示されています。現在のイベントは13番で、まだ入力していません。以下の履歴置換の例があります:
!11と!-2は、イベント11を指します。!!は前回のイベント(イベント12)を指します。!!は!と略記でき、続く:で区切られます。!nはイベント9を指し、このイベントはnで始まります。!?old?は、文字列oldを含む最も最近のイベント(この例ではイベント12)を指します。
単語指定や修飾子がない場合、履歴参照はそのイベント全体を展開します。例えば、!cp と入力するとコピーコマンドを再実行し、!!|more と入力すれば、diff の出力がスクロールして見えなくなった場合にその出力を more で再表示できます。
履歴参照は、必要に応じて波括弧 {} で囲むことができます。例えば、!vdoc は vdoc で始まるコマンドを探しますが、この例では見つかりません。しかし、!{v}doc と入力すれば、vi wumpus.man というコマンドに明確に展開されます。波括弧内でも履歴置換はネストされません。
注意: csh(1) では、例えば !3d はイベント3に 'd' を追加して展開しますが、tcsh では !3d は 3d で始まる最後のイベントに展開されます。完全に数値のみの引数だけがイベント番号として扱われます。!3d を csh(1) のように展開させたい場合は、!{3}d のように波括弧で囲む必要があります。
イベントから単語を選択するには、イベント仕様の後に : と単語の指定子を付けます。入力行の単語は番号付けされ、最初の単語(通常はコマンド)は 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つ以上の修飾子を続けることで編集(「修正」)できます。修飾子はそれぞれ : で始まります:
h: パス名の末尾のコンポーネントを削除し、ヘッド(先頭部分)を残します。t: パス名の先頭のコンポーネントを削除し、テイル(末尾部分)を残します。r: ファイル名拡張子.xxxを削除し、ルート名(拡張子を除いた名前)を残します。e: 拡張子を除いた部分を削除し、拡張子のみを残します。u: 最初の小文字を大文字に変換します。l: 最初の大文字を小文字に変換します。s/l/r/:lをrに置き換えます。lは単なる文字列であり、正規表現ではありません。区切り文字として/の代わりに任意の文字を使えます。(、)、|、>の内部では区切り文字をエスケープするために\を使えます。r内の&はlに置き換えられます。lが空('')の場合、前回の置換で使われたlや、以前の検索またはイベント番号が使用されます。区切り文字の後に改行が続けば、末尾の区切り文字は省略できます。&: 前回の置換を繰り返します。g: 修飾子を各単語に1回ずつ適用します。a(+) : 1つの単語に対して修飾子を可能な限り何度も適用します。aとgは一緒に使うことで修飾子を全体に適用できます。s修飾子では、元の単語に含まれるパターンだけが置き換えられ、置換結果を含むパターンは置き換えられません。p: 新しいコマンドラインを印刷しますが、実行はしません。q: 置換後の単語を引用符で囲み、さらに置換が行われないようにします。x:qと同様ですが、空白、タブ、改行で単語に分割します。
修飾子は、最初の修正可能な単語にのみ適用されます(g を使用した場合を除く)。修正可能な単語が存在しない場合はエラーになります。
例えば、diff コマンドは次のように書くことができます:diff wumpus.man.old !#^:r。ここでは、!#^(前回のコマンドの最初の引数)から :r を使って .old を削除しています。次に、echo hello out there と入力した後に、echo !*:u と入力すれば、hello を大文字に変換します。さらに echo !*:au と入力すれば、hello を大文字にして「言う」ことができますし、echo !*:agu と入力すれば、文字通り大声で叫ぶことができます。mail -s "I forgot my password" rot の後に !:s/rot/root と入力することで、rot のスペルを修正することができます(ただし、スペル修正については別のアプローチもあります)。
また、置換には特別な省略形があります。^ は、入力行の最初の文字である場合、!:s^ と同じ意味になります。したがって、^rot^root と入力することで、前述の例でのスペル修正を行うことができます。これは唯一、! で始まらない履歴置換です。
(+) csh では、履歴や変数展開に対して1つの修飾子しか適用できませんが、tcsh では複数の修飾子を使用できます。例えば:
1% mv wumpus.man /usr/man/man1/wumpus.1
2% man !$:t:r
3man wumpus
csh では結果は wumpus.1:r になります。! と修飾子を組み合わせる場合は、修飾子の後にコロンが来るため、波括弧で囲む必要があることもあります:
1> mv a.out /usr/games/wumpus
2> setenv PATH !$:h:$PATH
3Bad ! modifier: $.
4> setenv PATH !{-2$:h}:$PATH
5setenv PATH /usr/games:/bin:/usr/bin:.
最初の試みは csh では成功しますが、tcsh では失敗します。なぜなら、tcsh は2番目のコロンの後に別の修飾子が必要だと期待しているからです。
最後に、履歴はエディタからもアクセスできます。up-history や down-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 substitution)
シェルはエイリアスのリストを保持しており、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 という「コマンド」は引数を pr(1) を使ってプリンタに送ります。
エイリアス置換は、コマンドの最初の単語がエイリアスを持たなくなるまで繰り返されます。もしエイリアス置換が最初の単語を変更しなかった場合(前述の例のように)、それはループを防ぐためにフラグが立てられます。他のループも検出され、エラーが発生します。
一部のエイリアスはシェルによって使用されます。これについては「特別なエイリアス」を参照してください。
変数置換(Variable substitution)
シェルは変数のリストを保持しており、それぞれの変数には0個以上の単語からなる値が設定されています。シェル変数の値は、set および unset コマンドで表示したり変更したりできます。システムは独自に「環境」変数のリストを管理しています。これらの変数は、printenv、setenv、および unsetenv コマンドで表示したり変更したりできます。
(+) 変数は set -r コマンドを使って読み取り専用に設定できます(詳細は後述)。読み取り専用変数は変更や解除ができません。これを試みるとエラーが発生します。変数を読み取り専用に設定した後、再度書き込み可能にすることはできませんので、set -r の使用には注意が必要です。環境変数は読み取り専用にすることはできません。
シェルによって設定されたり参照されたりする変数もあります。例えば、argv 変数はシェルの引数リストを表しており、この変数の値の各単語は特別な方法で参照されます。また、シェルにはトグル変数もあり、これらの変数の値が何であるかは重要ではなく、単に設定されているかどうかが重要です。例えば、verbose 変数はトグルで、コマンド入力をエコー表示するかどうかを制御します。この変数は -v コマンドラインオプションで設定されます。シェルで参照されるすべての変数は「特別なシェル変数」としてリスト化されています。
他の操作では、変数を数値的に扱います。@ コマンドを使うことで、数値計算を行い、その結果を変数に代入することができます。ただし、変数の値は常に(0個以上の)文字列として表されます。数値演算の目的で、空文字列はゼロとみなされ、複数の単語を含む変数値では2番目以降の単語は無視されます。
入力行がエイリアス化されて解析された後、各コマンドが実行される前に、変数置換が $ 文字によって行われます。この展開は、$ の前に \ を付けることで防ぐことができますが、"(ダブルクォート)の中では常に展開が行われ、'(シングルクォート)の中では展開は行われません。シングルクォートで囲まれた文字列は後で解釈されるため(下記のコマンド置換を参照)、その中では $ の置換は後で行われます(あるいは行われません)。もし $ の後に空白、タブ、または改行が続く場合、そのまま $ は変換されません。
入力/出力のリダイレクトは、変数展開の前に認識され、変数展開は別々に行われます。それ以外の場合、コマンド名とその引数リストは一緒に展開されます。このため、最初の(コマンド)単語が複数の単語を生成する場合があります。その場合、最初の単語がコマンド名となり、残りの単語が引数として扱われます。
変数置換の結果は、"(ダブルクォート)で囲まれていない限り、最終的にはコマンドやファイル名の置換を引き起こす可能性があります。" で囲まれている場合、複数の単語から成る変数の値は1つの単語(の一部)に展開され、その値の各単語が空白で区切られます。:q 修飾子が置換に適用されると、その変数は複数の単語に展開され、各単語は空白で区切られ、さらに後のコマンドやファイル名の置換を防ぐためにクォートされます。
以下のメタシーケンスは、変数の値をシェルの入力に挿入するために使用されます。特に記載がない限り、設定されていない変数を参照することはエラーとなります。
$name${name}
これらは、変数 name の値に含まれる単語を、空白で区切って置換します。波括弧 {} は、name とその後に続く文字を区別するために使用されます。シェル変数の名前は、アルファベットと数字で構成され、アルファベットで始まります。アンダースコア(_)もアルファベットと見なされます。もし name がシェル変数でなく、環境に設定されている場合は、その値が返されます(ただし、以下に示す他の形式は使用できません)。
$name[selector]${name[selector]}
変数 name の値から指定された単語を選択して置換します。セレクターは $ 置換を受け、単一の番号または - で区切られた2つの番号で構成されます。変数の値の最初の単語は 1 として番号付けされます。範囲の最初の番号が省略されるとデフォルトで 1 になり、範囲の最後の番号が省略されるとデフォルトで $#name(変数 name の単語数)になります。セレクター * はすべての単語を選択します。範囲の最後の番号が省略されたり範囲が空でもエラーにはなりません。
$0
コマンド入力が読み込まれているファイル名を置換します。ファイル名が不明な場合はエラーになります。
$number${number}$argv[number] と同じです。
$*$argv と同じで、$argv[*] とも同じです。
これらの変数置換には、History substitution で説明した : 修飾子(:p を除く)を適用できます。複数の修飾子を使うこともできます。修飾子を使う場合、波括弧 {} で変数置換を区切る必要があることがあります。
次の置換は : 修飾子で修正することはできません。
$?name${?name}
変数 name が設定されている場合は文字列 '1' を、設定されていない場合は '0' を置換します。
$?0
現在の入力ファイル名がわかっている場合は '1' を、わかっていない場合は '0' を置換します。インタラクティブシェルでは常に '0' になります。
$#name${#name}
変数 name の単語数を置換します。
$#$#argv と同じです。
$%name${%name}
変数 name の文字数を置換します。
$%number${%number}$argv[number] の文字数を置換します。
$?$status と同じです。
$$
(親)シェルの(10進数)プロセス番号を置換します。
$!
このシェルで最後に開始されたバックグラウンドプロセスの(10進数)プロセス番号を置換します。
$_
最後に実行されたコマンドラインを置換します。
$<
標準入力から1行を置換します。それ以降の解釈は行われません。シェルスクリプト内でキーボードからの入力を読み取るために使用できます。
csh では常に $< を引用符で囲み($<:q と同等)、tcsh では囲まれません。さらに、tcsh ではユーザーが入力を待っている間に割り込みを入れることができますが、csh ではこれを許可していません。
エディタコマンド expand-variables(通常は ^X-$ にバインドされている)は、個々の変数をインタラクティブに展開するために使用できます。
コマンド、ファイル名、およびディレクトリスタックの置換(Command, filename and directory stack substitution)
残りの置換は、組み込みコマンドの引数に選択的に適用されます。これは、評価されない式の部分がこれらの展開の対象とならないことを意味します。シェル内部ではないコマンドに対しては、コマンド名が引数リストから分離して置換されます。これは、入力出力のリダイレクションが実行された後、メインシェルの子プロセスで非常に遅く行われます。
コマンド置換(Command substitution)
コマンド置換は、コマンドが '''(バッククオート)で囲まれていることによって示されます。そのようなコマンドの出力は、空白、タブ、改行で別々の単語に分割され、空の単語は破棄されます。出力は変数およびコマンド置換され、元の文字列の代わりに置き換えられます。
ダブルクオート(")内のコマンド置換では、空白やタブが保持され、改行だけが新しい単語を強制します。最終的な改行は、いかなる場合でも新しい単語を強制しません。そのため、コマンド置換は、コマンドが完全な行を出力しても、単語の一部だけを生成することがあります。
デフォルトでは、シェルのバージョン6.12以降、コマンド内のすべての改行およびキャリッジリターン文字はスペースに置き換えられます。もしこれがオフになっている場合(csubstnonl を無効にした場合)、改行は通常のようにコマンドを区切ります。
ファイル名置換(Filename substitution)
もし単語に *、?、[、または { のいずれかの文字が含まれていたり、~ で始まっていた場合、その単語はファイル名置換、別名「グロビング」の候補となります。この単語はパターン(「グロブパターン」)として扱われ、パターンに一致するファイル名のアルファベット順に並べられたリストに置き換えられます。
ファイル名の一致において、ファイル名の先頭または / の直後にある . や / は明示的に一致させる必要があります。文字 * は、空文字列も含め、任意の文字列に一致します。文字 ? は任意の1文字に一致します。シーケンス [...] は、括弧内で指定された任意の1文字に一致します。[ ... ] の中で、- で区切られた2文字は、アルファベット順で間にある任意の文字に一致します。
(+) 一部のグロブパターンは否定できます:[^...] のシーケンスは、括弧内で指定された文字や文字範囲以外の任意の1文字に一致します。
グロブパターン全体も ^ を使って否定できます:
1> echo *
2bang crash crunch ouch
3> echo ^cr*
4bang 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」シェル変数を設定すると、ファイル名の置換を防ぐことができ、通常 ^X-* にバインドされている「expand-glob」エディターコマンドを使用して、個別のファイル名置換をインタラクティブに展開することができます。
ディレクトリスタック置換(Directory stack substitution) (+)
ディレクトリスタックは、pushd、popd、dirs 組み込みコマンドで使用される、ゼロから番号付けされたディレクトリのリストです(詳細は該当項目参照)。dirs コマンドは、ディレクトリスタックを表示したり、ファイルに保存したり、復元したり、クリアしたりすることができます。また、savedirs と dirsfile シェル変数を設定することで、ログアウト時に自動的にディレクトリスタックを保存し、ログイン時にそれを復元することができます。dirstack シェル変数はディレクトリスタックを確認したり、任意のディレクトリをスタックに追加するために設定したりすることができます。
= に続けて1つ以上の数字が指定されると、それはディレクトリスタックのエントリに展開されます。特別なケースとして =- はスタックの最後のディレクトリに展開されます。例えば、
1> dirs -v
20 /usr/bin
31 /usr/spool/uucp
42 /usr/accts/sys
5> echo =1
6/usr/spool/uucp
7> echo =0/calendar
8/usr/bin/calendar
9> echo =-
10/usr/accts/sys
「noglob」および「nonomatch」シェル変数、ならびに「expand-glob」エディターコマンドは、ディレクトリスタックの置換にもファイル名置換と同様に適用されます。
その他の置換(Other substitution) (+)
上記に厳密に関連するものではないが、完結性のためにここで言及されるファイル名に関するいくつかの変換があります。symlinks 変数が「expand」に設定されていると、任意のファイル名はフルパスに展開されます。引用符で囲むことでこの展開は防げ、normalize-path エディターコマンドを使用すると、要求に応じて展開が行われます。normalize-command エディターコマンドは、PATH にあるコマンドをフルパスに展開します。最後に、cd と pushd は - を古い作業ディレクトリとして解釈します(これはシェル変数 owd と同等です)。これは置換ではなく、これらのコマンドでのみ認識される省略形ですが、引用符で囲むことによって防ぐことができます。
コマンド(Commands)
次の3つのセクションでは、シェルがどのようにコマンドを実行し、その入力と出力を処理するかについて説明します。
単純なコマンド、パイプライン、およびシーケンス(Simple commands, pipelines and sequences)
単純なコマンドは、実行されるべきコマンドを指定する最初の単語から成る一連の単語です。 | で結ばれた単純なコマンドの列はパイプラインを形成し、パイプライン内の各コマンドの出力は次のコマンドの入力に接続されます。
単純なコマンドやパイプラインは ; でつなげてシーケンスにすることができ、順番に実行されます。コマンドやパイプラインは || または && でつなげてシーケンスにすることもでき、これはC言語と同様に、最初のコマンドが失敗した場合に2番目が実行される(||の場合)、または最初のコマンドが成功した場合に2番目が実行される(&&の場合)ことを示します。
単純なコマンド、パイプライン、またはシーケンスは () で括ることができ、これは単純なコマンドを形成し、そのコマンドはさらにパイプラインやシーケンスの一部となり得ます。コマンド、パイプライン、またはシーケンスは、終了を待たずに実行するために末尾に & を付けることができます。
組み込みおよび非組み込みコマンドの実行(Builtin and non-builtin command execution)
組み込みコマンドはシェル内で実行されます。パイプラインの最後を除くすべてのコンポーネントが組み込みコマンドである場合、そのパイプラインはサブシェルで実行されます。
括弧で囲まれたコマンドは常にサブシェルで実行されます。
1(cd; pwd); pwd
この場合、ホームディレクトリが表示された後、元のディレクトリの状態に戻りますが、
1cd; pwd
こちらはホームディレクトリに移動し、その状態のままとなります。括弧で囲まれたコマンドは、主に cd が現在のシェルに影響を与えないように使用されます。
実行するコマンドが組み込みコマンドでない場合、シェルはそのコマンドを execve(2) を使って実行しようとします。path 変数内の各単語は、シェルがコマンドを探しに行くディレクトリを示します。シェルが -f オプションを与えられていない場合、シェルはこれらのディレクトリ内のコマンド名をハッシュ化し、コマンドが存在する可能性があるディレクトリでのみ execve(2) を試みます。これにより、検索パスに多くのディレクトリが含まれている場合でも、コマンドの位置を迅速に特定できます。このハッシュ機構は以下の場合には使用されません:
unhashを使ってハッシュ化が明示的に無効にされた場合。- シェルに
-f引数が与えられた場合。 pathの各ディレクトリコンポーネントが/で始まらない場合。- コマンドが
/を含む場合。
上記の4つのケースでは、シェルは path ベクトルの各コンポーネントと指定されたコマンド名を結合し、ファイルのパス名を形成して、それを実行しようとします。実行が成功すると、検索は終了します。
実行可能ファイルとシェルコマンドの処理
ファイルに実行権限があるが、システムがそのファイルを実行可能なファイルとして認識しない場合(すなわち、実行可能なバイナリファイルでもなく、インタプリタを指定するスクリプトでもない場合)、そのファイルはシェルコマンドを含むファイルとして扱われ、新しいシェルが起動されてそのファイルを読みます。シェル特有のエイリアスを設定することで、シェル自体以外のインタプリタを指定することもできます。
#! スクリプトインタプリタの規約を理解しないシステムでは、シェルがそれをエミュレートするようにコンパイルされている場合があります(この場合は、version シェル変数を参照してください)。その場合、シェルはファイルの最初の行を確認し、それが #!interpreter arg ... の形式であれば、指定されたインタプリタを引数とともに起動し、そのファイルを標準入力として渡します。
入力/出力(Input/output)
コマンドの標準入力および標準出力は、以下の構文でリダイレクトできます:
< name
指定されたファイル(最初に変数、コマンド、ファイル名が展開される)を標準入力として開きます。
<< word
シェル入力を「word」と一致する行まで読み取ります。word は変数、ファイル名、コマンドの展開を受けません。各入力行は、置換が行われる前に word と比較されます。word に引用符(\、"、')が含まれている場合、変数やコマンドの置換が行われ、\ を使って $、\、および ''' を引用することができます。置換されたコマンドは、空白、タブ、改行を保持しますが、最終行の改行は除去されます。結果として得られたテキストは匿名の一時ファイルに保存され、そのファイルがコマンドに標準入力として渡されます。
> name>! name>& name>&! name
指定されたファイル name を標準出力として使用します。ファイルが存在しない場合は作成され、存在する場合はその内容が切り捨てられます(前の内容は失われます)。
シェル変数 noclobber が設定されている場合、そのファイルは存在していないか、文字特殊ファイル(例:端末や /dev/null)でないとエラーが発生します。これにより、ファイルの偶発的な破壊を防ぐことができます。この場合、 ! 付きの形式を使用することで、このチェックを抑制できます。
& を使った形式は、診断出力も標準出力と同じファイルにルーティングします。name は < を使った入力ファイル名と同様に展開されます。
>> name>>& name>>! name>>&! name> と似ていますが、出力は name の末尾に追加されます。シェル変数 noclobber が設定されている場合、ファイルが存在しないことがエラーとなりますが、'!' 付きの形式を使用することでこの制約を回避できます。
コマンドはシェルが起動された環境を受け取りますが、入力/出力パラメータやコマンドがパイプライン内にある場合によって修正されます。したがって、シェルコマンドのファイルから実行されるコマンドは、デフォルトでコマンドのテキストにアクセスできません。代わりに、シェルの元の標準入力を受け取ります。 << メカニズムを使用してインラインデータを渡すことができます。これにより、シェルコマンドスクリプトはパイプラインのコンポーネントとして機能し、シェルが標準入力をブロック読みすることを可能にします。
コマンドが分離された状態で実行される場合、そのデフォルトの標準入力は空のファイル /dev/null ではなく、シェルの元の標準入力です。もしこれが端末であり、プロセスが端末から読み込もうとした場合、プロセスはブロックされ、ユーザーに通知されます(ジョブに関する詳細は「Jobs」参照)。
診断出力は、標準出力と一緒にパイプを使ってリダイレクトすることもできます。単に | の代わりに |& を使います。
現在、シェルは標準出力だけをリダイレクトし、診断出力をリダイレクトしないことはできませんが、 (command > output-file) >& error-file のような方法で回避することがよくあります。output-file または error-file に /dev/tty を指定すると、出力が端末に送られます。
機能(Features)
シェルがコマンドラインをどのように受け取り、解析し、実行するかについて説明した後、ここではシェルのさまざまな便利な機能について説明します。
制御フロー(Control flow)
シェルには、コマンドファイル(シェルスクリプト)の制御フローを調整するために使用できる多くのコマンドが含まれています。また、ターミナル入力からも制御フローを調整することが可能です(限られた方法ではありますが、非常に有用です)。これらのコマンドはすべて、シェルに入力を再読込させたり、スキップさせたりすることによって動作し、その実装により、一部のコマンドの配置が制限されることがあります。
foreach、switch、while 文、および if 文の if-then-else 形式では、主要なキーワードが入力行の1つの単純なコマンドとして現れる必要があります。例は以下の通りです。
シェルの入力がシーク可能でない場合、シェルはループが読み込まれている間に入力をバッファリングし、この内部バッファでシークを行って、ループで示される再読み込みを実現します(これにより、シークできない入力に対しても逆方向の goto が成功する場合があります)。
式(Expressions)
if、while、および exit 組み込みコマンドは、共通の構文を持つ式を使用します。式には、次の3つのセクションで説明される演算子を含めることができます。なお、@ 組み込みコマンド(該当項目参照)には独自の構文があります。
論理演算子、算術演算子および比較演算子(Logical, arithmetical and comparison operators)
これらの演算子はC言語のものに似ており、優先順位も同じです。以下の演算子が含まれます:
1|| && | ^ & == != =~ !~ <= >=
2< > << >> + - * / % ! ~ ( )
優先順位は右から左へ増加します。具体的には、以下のようになります:
'==','!=','=~','!~'が同じ優先順位'<=','>=','<','>'が同じ優先順位'<<','>>'が同じ優先順位'+','-'が同じ優先順位'*','/','%'が同じ優先順位
同じ優先順位の演算子が複数使用されている場合、計算は右側の演算子から行われます。'==', '!=', '=~', '!~' 演算子は引数を文字列として比較しますが、それ以外の演算子は数値に対して動作します。'=~' と '!~' は '!=' と '==' に似ていますが、右辺がグロブパターン(ファイル名の置換参照)で、左辺のオペランドがそのパターンと照合されます。これにより、シェルスクリプト内でパターンマッチングのみが必要な場合に switch 組み込みコマンドを使用する必要が減ります。
引数が不足していたり、空であったりする場合、その引数は 0 と見なされます。すべての式の結果は文字列として返され、これは10進数の数値を表します。重要なのは、式の各コンポーネントは同じ単語内に現れないようにすることで、パーサーにとって構文的に重要な表現('&'、'|'、'<'、'>'、'('、')')と隣接している場合を除き、演算子間は空白で囲む必要があることです。
コマンドの終了ステータス(Command exit status)
コマンドは式の中で実行でき、その終了ステータスは中括弧({})で囲むことによって取得できます。コマンドの単語と中括弧の間には空白を入れることを忘れないでください。コマンドが終了ステータス0で終了した場合、そのコマンドは成功と見なされ、1 が返されます。それ以外の場合は失敗と見なされ、0 が返されます。より詳細なステータス情報が必要な場合、そのコマンドは式の外で実行され、ステータスシェル変数が調べられるべきです。
ファイル調査演算子(File inquiry operators)
これらの演算子のいくつかは、ファイルおよび関連するオブジェクトに対して真偽値テストを行います。構文は -op file で、op は以下のいずれかの演算子です:
r- 読み取りアクセスw- 書き込みアクセスx- 実行アクセスX- パス内で実行可能、またはシェルの組み込みコマンド(例:-X lsや-X ls-Fは通常真ですが、-X /bin/lsは真ではありません) (+)e- 存在o- 所有者z- サイズがゼロs- 非ゼロサイズ (+)f- 通常のファイルd- ディレクトリl- シンボリックリンク (+) *b- ブロック特殊ファイル (+)c- キャラクタ特殊ファイル (+)p- 名前付きパイプ(FIFO) (+) *S- ソケット特殊ファイル (+) *u- セットユーザーIDビットが設定されている (+)g- セットグループIDビットが設定されている (+)k- スティッキービットが設定されている (+)t- ファイル(数字で指定される)が端末デバイスのオープンファイルディスクリプタである (+)R- マイグレーション済み(Convexシステム専用) (+)L- 複数の演算子によるテストをシンボリックリンクに対して適用し、リンク先のファイルではなくリンク自体に対して評価する (+) *
file はコマンドおよびファイル名が展開され、その後、実際のユーザーに対する指定された関係をテストします。もし file が存在しない、アクセスできない場合、または * が付いた演算子に関して指定されたファイルタイプが現在のシステムに存在しない場合、すべての調査は偽(0)として返されます。
これらの演算子は簡潔に組み合わせて使うことができます:-xy file は -x file && -y file と同等です。例えば、-fx は通常の実行可能ファイルに対しては真(1)を返しますが、ディレクトリには偽(0)を返します。
その他の演算子
L は複数の演算子を組み合わせたテストの中で使用され、後続の演算子をシンボリックリンク自体に適用します。リンク先のファイルではなく、リンクそのものに対して演算子を適用するためです。例えば、-lLo は呼び出し元のユーザーが所有するリンクに対して真となります。Lr、Lw、Lx は常にリンクに対して真を返し、リンクでないものに対しては偽(false)を返します。L は複数演算子テストの最後の演算子で使われる場合、異なる意味を持ちます。
ファイルをファイルとして期待する演算子と、ファイル以外のものを期待する演算子(例:X と t)を組み合わせることは可能ですが、あまり有用ではなく、時には誤解を招くことがあります。L の後にファイル以外の演算子を置くと、特に奇妙な結果を引き起こすことがあります。
他の演算子は、真偽値ではなく、異なる情報を返します。これらの演算子も、先ほどの形式に従い、op は以下のいずれかのものです:
A- 最後にファイルにアクセスした時間(エポックからの秒数)A:- 上記と同じだが、タイムスタンプ形式(例:Fri May 14 16:36:10 1993)M- 最後にファイルが変更された時間M:- 上記と同じだが、タイムスタンプ形式C- 最後にinodeが変更された時間C:- 上記と同じだが、タイムスタンプ形式D- デバイス番号I- inode番号F- 複合ファイル識別子(形式:device:inode)L- シンボリックリンクが指すファイル名N- (ハード)リンク数P- パーミッション(8進数、先頭のゼロなし)P:- 上記と同じだが、先頭のゼロ付きPmode -'-P file & mode'と同等(例:-P22 fileは、fileがグループおよび他のユーザーによって書き込み可能なら22を返し、グループのみなら20、どちらでもない場合は0)Pmode: - 上記と同じだが、先頭のゼロ付きU- 数値のユーザーIDU:- ユーザー名、またはユーザー名が不明な場合は数値のユーザーIDG- 数値のグループIDG:- グループ名、またはグループ名が不明な場合は数値のグループIDZ- サイズ(バイト単位)
これらの演算子のうち、複数の演算子を使用する場合は、これらの演算子のいずれかが最後にのみ登場することができます。L は複数演算子テストの中で最後に来ると異なる意味を持ちますので注意が必要です。これらの演算子の中には、0 が有効な戻り値であるものも多いため、失敗した場合には 0 を返さず、ほとんどは -1 を返し、F 演算子は : を返します。
シェルがPOSIX定義でコンパイルされている場合(version シェル変数を参照)、ファイル調査の結果はファイルのアクセス許可ビットに基づいて評価され、access(2) システムコールの結果には依存しません。例えば、-w 演算子でファイルをテストする場合、そのファイルのアクセス許可が書き込みを許可しているが、ファイルシステムが読み取り専用でマウントされている場合、POSIXシェルではテストが成功しますが、非POSIXシェルでは失敗します。
ファイル調査演算子は、filetest 組み込みコマンドでも評価できます(詳しくは filetest を参照)。
ジョブ(Jobs)
シェルは、各パイプラインにジョブを関連付けます。シェルは現在のジョブのテーブルを保持し、その情報を jobs コマンドで表示します。ジョブには小さな整数番号が割り当てられます。ジョブが非同期に & を使って開始されると、シェルは以下のような行を表示します:
1[1] 1234
これは、非同期に開始されたジョブがジョブ番号1で、そのジョブには1つのプロセス(トップレベルのプロセス)があり、そのプロセスIDが1234であることを示しています。
ジョブを実行中で、他の作業をしたい場合、通常は ^Z(サスペンドキー)を押すことで、現在のジョブにSTOP信号が送られます。シェルはその後、ジョブが「Suspended(サスペンド)」されていることを示し、次のプロンプトを表示します。listjobs シェル変数が設定されていると、すべてのジョブが jobs 組み込みコマンドのようにリスト表示されます。listjobs が 'long' に設定されている場合は、jobs -l のように長い形式で表示されます。その後、サスペンドされたジョブの状態を操作できます。ジョブをバックグラウンドに戻すには bg コマンドを使い、他のコマンドを実行した後にジョブをフォアグラウンドに戻すには fg コマンドを使います。(また、run-fg-editor エディタコマンドも参照)
^Z は即座に効果を発揮し、割り込みのように未処理の出力と未読の入力が破棄されます。wait 組み込みコマンドは、シェルがすべてのバックグラウンドジョブの終了を待つようにします。
^] キーは遅延サスペンド信号を送信します。この信号は、プログラムが read(2) を呼び出そうとしたときにのみ STOP 信号を生成します。この機能は、ジョブにいくつかのコマンドを準備しておき、そのジョブがそれらを読み取った後に停止させたい場合に便利です。^Y は csh(1) ではこの機能を実行しますが、tcsh では編集コマンドとして使用されます。
バックグラウンドで実行されているジョブは、ターミナルから読み取ろうとすると停止します。通常、バックグラウンドジョブは出力を生成できますが、stty tostop コマンドを使うと、この動作を無効にすることができます。このttyオプションを設定すると、バックグラウンドジョブは出力を生成しようとしたときに停止します。
シェルには、ジョブを参照するいくつかの方法があります。% 記号はジョブ名を示します。例えば、ジョブ番号1を参照したい場合は、%1 と指定できます。ジョブ名を指定すると、そのジョブがフォアグラウンドに戻ります。つまり、%1 は fg %1 の同義語であり、ジョブ1をフォアグラウンドに戻します。同様に、%1 & と指定すると、ジョブ1がバックグラウンドで再開され、これは bg %1 と同じです。
ジョブは、その名前の一部を使っても参照できます。例えば、%ex と指定すれば、ex という名前で開始された唯一のサスペンドされたジョブが再開されます。また、%?string と指定することで、テキストに string を含むジョブを指定できます(ただし、そのようなジョブが1つだけである場合)。
シェルは、現在のジョブと前のジョブの情報を保持します。ジョブに関する出力では、現在のジョブが「+」で、前のジョブが「-」でマークされます。省略形「%+」、「%」、および(履歴機構の構文に倣って)「%%」はすべて現在のジョブを指し、「%-」は前のジョブを指します。
ジョブ制御機構は、いくつかのシステムで stty(1) のオプション「new」が設定されていることを要求します。これは、ジョブを停止するための割り込み文字をキーボードから生成する「新しい」ttyドライバの実装から来たものです。詳細については、stty(1) と setty 組み込みコマンドを参照し、新しいttyドライバでオプションを設定する方法を確認してください。
ステータス報告(Status reporting)
シェルは、プロセスの状態が変化するたびに即座にその情報を取得します。通常、ジョブがブロックされて進行不可能になると、次にプロンプトを表示する直前にのみ通知されます。これは、作業を中断させないようにするためです。しかし、シェル変数 notify を設定すると、バックグラウンドジョブの状態変化が即座に通知されるようになります。また、notify というシェルコマンドを使用することで、特定のプロセスをマークし、その状態変化を即座に報告させることができます。デフォルトでは、notify コマンドは現在のプロセスをマークします。バックグラウンドジョブを開始した後に notify と入力することで、そのジョブの状態変化を即座に報告させることができます。
停止したジョブがある状態でシェルを終了しようとすると、「停止中のジョブがあります」という警告が表示されます。jobs コマンドで停止中のジョブを確認することができます。これを行ったり、すぐに再度終了しようとすると、シェルは再度警告を表示せず、停止中のジョブは終了されます。
自動化、定期的、タイミング指定のイベント(Automatic, periodic and timed events)(+)
シェルの「ライフサイクル」のさまざまな時点で、コマンドを実行したり、その他のアクションを自動的に実行したりする方法はいくつかあります。これらはここに要約され、適切な組み込みコマンド、特殊なシェル変数、特殊なエイリアスに関する詳細な説明がそれぞれの項目で行われています。
sched 組み込みコマンドは、コマンドをスケジュールされたイベントリストに追加し、指定した時間にシェルがそれらを実行するようにします。
beepcmd、cwdcmd、periodic、precmd、postcmd、および jobcmd の特殊なエイリアスは、それぞれ、シェルがベルを鳴らす時、作業ディレクトリが変更される時、指定した間隔(tperiod分)ごとに、各プロンプトの前、各コマンドの実行前、各コマンドの実行後、またはジョブが開始されたり前面に持ち上げられたときにコマンドを実行するために設定できます。
autologout シェル変数は、一定の非アクティブ時間が経過した後にシェルをログアウトまたはロックするように設定できます。
mail シェル変数は、新しいメールを定期的にチェックするように設定できます。
printexitvalue シェル変数は、ゼロ以外のステータスで終了したコマンドの終了ステータスを表示するように設定できます。
rmstar シェル変数は、rm * を実行した際に、それが本当に意図した操作かどうかを確認するように設定できます。
time シェル変数は、指定したCPU秒数を超えるプロセスが終了した後に time 組み込みコマンドを実行するように設定できます。
watch および who シェル変数は、選択したユーザーがログインまたはログアウトする際に報告を行い、log 組み込みコマンドはそのユーザーに関する情報をいつでも表示します。
ネイティブ言語システムサポート(Native Language System support)(+)
シェルは8ビット対応(コンパイルされていれば、versionシェル変数を参照)であり、この能力を必要とする文字セットをサポートします。NLS(ネイティブ言語システム)サポートは、シェルがシステムのNLSを使用するようにコンパイルされているかどうかによって異なります(再度、versionを参照)。いずれの場合でも、7ビットASCIIがデフォルトの文字コード(例えば、どの文字が印刷可能かの分類)およびソート順となり、LANGやLC_CTYPE環境変数を変更すると、これらに関して変更があるかどうかがチェックされます。
システムのNLSを使用する場合、setlocale(3)関数が呼び出され、適切な文字コード/分類およびソート(例えば、「en_CA.UTF-8」を指定すると「UTF-8」が文字コードとして使用される)が決定されます。この関数は通常、LANGおよびLC_CTYPE環境変数を調べます。詳細はシステムのドキュメントを参照してください。システムのNLSを使用しない場合、シェルはISO 8859-1文字セットを使用すると仮定し、LANGやLC_CTYPEの変数が設定されている場合、それらの値に関係なくシミュレートします。シミュレートされたNLSでは、ソート順は影響を受けません。
また、実際のNLSまたはシミュレートされたNLSの両方において、\200-\377の範囲内のすべての印刷可能な文字(つまり、M-charバインディングがあるもの)は自動的にself-insert-commandに再バインドされます。エスケープ文字列に対応するバインディングはそのまま残ります。NOREBIND環境変数が設定されている場合、これらの文字は再バインドされません。これは、ISO 8859-1を完全にサポートすることを仮定したシミュレートされたNLSまたは初歩的な実際のNLSに役立つかもしれません。それ以外の場合、\240-\377の範囲内のすべてのM-charバインディングは実質的に解除されます。もちろん、bindkeyを使って関連するキーを再バインドすることは可能です。
未知の文字(つまり、印刷可能でも制御文字でもない文字)は\nnnの形式で表示されます。TTYが8ビットモードでない場合、他の8ビット文字はASCIIに変換され、スタンドアウトモードを使って表示されます。シェルはTTYの7ビット/8ビットモードを変更することはなく、ユーザーが開始した7ビット/8ビットモードの変更を追跡します。NLSを使用するユーザー(あるいは、メタキーを使いたいユーザー)は、適切なstty(1)コマンドを使って明示的にTTYを8ビットモードに設定する必要がある場合があります。例えば、~/.loginファイルで設定します。
OSバリアントサポート(OS variant support)(+)
特定のオペレーティングシステムの機能をサポートするために、新しい組み込みコマンドがいくつか提供されています。すべてのコマンドは、組み込みコマンドのセクションで詳細に説明されています。
TCFをサポートするシステム(aix-ibm370、aix-ps2)では、getspathとsetspathはシステムの実行パスを取得および設定し、getxversとsetxversは実験的なバージョンプレフィックスを取得および設定し、migrateはプロセスをサイト間で移動させます。jobs組み込みコマンドは、各ジョブが実行されているサイトを表示します。
BS2000では、bs2cmdは基盤となるBS2000/OSDオペレーティングシステムのコマンドを実行します。
Domain/OSでは、inlibは現在の環境に共有ライブラリを追加し、rootnodeはルートノードを変更し、verはシステムタイプを変更します。
Machでは、setpathはMachのsetpath(1)と同等です。
Masscomp/RTUおよびHarris CX/UXでは、universeはユニバースを設定します。
Harris CX/UXでは、ucbまたはattは指定されたユニバースの下でコマンドを実行します。
Convex/OSでは、warpはユニバースを表示または設定します。
VENDOR、OSTYPE、MACHTYPEの環境変数は、それぞれシェルが実行されているシステムのベンダー、オペレーティングシステム、マシンタイプ(マイクロプロセッサクラスまたはマシンモデル)を示します。これらは、複数のタイプのマシン間で自分のホームディレクトリを共有する際に特に便利です。例えば、次のように設定できます:
1set path = (~/bin.$MACHTYPE /usr/ucb /bin /usr/bin .)
これにより、各マシン用にコンパイルされた実行可能ファイルを適切なディレクトリに配置できます。
versionシェル変数は、シェルがコンパイルされたときに選択されたオプションを示します。
また、新しいnewgrp組み込みコマンド、afsuserおよびecho_styleシェル変数、シェルの入力ファイルのシステム依存の場所(FILESを参照)についても注意が必要です。
シグナルの処理(Signal handling)
ログインシェルは、~/.logout ファイルを読み込んでいるときに割り込み信号を無視します。シェルは、-q オプションを付けて起動しない限り、終了信号(quit signal)を無視します。ログインシェルは終了信号を受け取りますが、非ログインシェルは親から終了動作を継承します。その他のシグナルは、シェルが親から継承した値を持ちます。
シェルスクリプト内では、割り込み信号や終了信号のシェルの処理を onintr で制御でき、ハングアップ信号の処理は hup と nohup で制御できます。
シェルはハングアップ信号を受け取ると終了します(logout シェル変数も参照)。デフォルトでは、シェルの子プロセスも終了しますが、シェルが終了するときに子プロセスにハングアップ信号を送信することはありません。hup はシェルが終了するときに子プロセスにハングアップ信号を送るように設定し、nohup は子プロセスがハングアップ信号を無視するように設定します。
ターミナル管理(Terminal management)(+)
シェルは、3つの異なるターミナル("tty")モードを使用します:edit(編集時に使用)、quote(リテラル文字を引用する時に使用)、および execute(コマンド実行時に使用)。シェルはそれぞれのモードでいくつかの設定を一定に保つため、ttyが混乱した状態になってもシェルに干渉しません。シェルはまた、ttyの速度やパディングの変更にも対応します。保持されるttyモードのリストは、setty 組み込みコマンドを使って確認および変更できます。エディタはCBREAKモード(またはその相当)を使用しますが、先行入力された文字も入力できます。
echotc、settc、および telltc コマンドは、コマンドラインからターミナル機能を操作およびデバッグするために使用できます。
SIGWINCHまたはSIGWINDOWをサポートするシステムでは、シェルはウィンドウのリサイズに自動的に適応し、LINESおよびCOLUMNS環境変数が設定されていればそれに応じて調整します。もしTERMCAP環境変数にli#およびco#フィールドが含まれている場合、シェルはそれを新しいウィンドウサイズに合わせて調整します。
リファレンス(Reference)
このマニュアルの次のセクションでは、利用可能なすべての組み込みコマンド、特殊エイリアス、および特殊シェル変数について説明します。
組み込みコマンド(Builtin commands)
%jobfg 組み込みコマンドの同義語です。
%job &bg 組み込みコマンドの同義語です。
:
何もしませんが、正常に終了します。
@@ name = expr@ name[index] = expr@ name++|--@ name[index]++|--
最初の形式は、すべてのシェル変数の値を表示します。
2番目の形式は、exprの値をnameに割り当てます。
3番目の形式は、exprの値をnameのindex番目のコンポーネントに割り当てます。nameとそのindex番目のコンポーネントはすでに存在している必要があります。
exprには、C言語のように*、+などの演算子を含めることができます。exprに<、>、&、または|が含まれている場合、その部分は必ず()で囲む必要があります。なお、exprの構文は、Expressionsで説明されているものとは関係ありません。
4番目と5番目の形式は、nameまたはそのindex番目のコンポーネントをインクリメント(++)またはデクリメント(--)します。@とnameの間には空白が必要です。nameと=の間、=とexprの間には空白は任意です。exprの構成要素は空白で区切る必要があります。
alias [name [wordlist]]
引数なしで実行すると、すべてのエイリアスが表示されます。nameを指定すると、そのエイリアスを表示します。nameとwordlistを指定すると、wordlistをnameのエイリアスとして設定します。wordlistはコマンドおよびファイル名の置換です。nameはaliasやunaliasにはできません。unalias組み込みコマンドも参照してください。
alloc
取得した動的メモリの量を表示し、使用中のメモリと空きメモリに分けて表示します。引数を指定すると、各サイズカテゴリの空きおよび使用中のブロック数が表示されます。カテゴリはサイズ8から始まり、各ステップで倍増します。このコマンドの出力は、システムの種類によって異なる場合があります。VAX以外のシステムでは、異なるメモリアロケータを使用することがあります。
bg [%job ...]
指定されたジョブ(または引数なしで現在のジョブ)をバックグラウンドに移動し、停止している場合は実行を再開します。jobは、ジョブ番号、文字列、''、%、+、-など、ジョブに関する説明で使用される形式です。
bindkey [-l|-d|-e|-v|-u] (+)bindkey [-a][-b][-k][-r][--] key (+)bindkey [-a][-b][-k][-c|-s][--] key command (+)
オプションなしで、最初の形式はすべてのバインドされたキーと、それぞれのキーがバインドされているエディタコマンドを一覧表示します。2番目の形式は、キーがバインドされているエディタコマンドを表示し、3番目の形式はエディタコマンドcommandをキーにバインドします。オプションには以下が含まれます:
-l: すべてのエディタコマンドと、それぞれのエディタコマンドにバインドされたキーの簡単な説明をリストします。-d: すべてのキーをデフォルトエディタの標準バインディングに設定します。-e: すべてのキーをGNU Emacs風の標準バインディングに設定します。-v: すべてのキーをvi(1)風の標準バインディングに設定します。-a: 代替キー・マップでのキー設定を表示または変更します。このキー・マップはviのコマンドモードで使用されます。-b:keyは制御文字(例:^A)、C-文字(例:C-A)、メタ文字(例:M-A)、ファンクションキー(例:F-string)、または拡張接頭辞キー(例:X-A)として解釈されます。-k:keyはシンボリックな矢印キー名(例:down、up、left、right)として解釈されます。-r:keyのバインディングを削除します。注意:bindkey -rはキーをself-insert-commandにバインドするわけではなく、完全にアンバインドします。-c:commandはエディタコマンドではなく、組み込みコマンドまたは外部コマンドとして解釈されます。-s:commandはリテラル文字列として解釈され、キーが押された時に端末入力として処理されます。コマンド内のバインディングされたキーは再解釈され、最大10レベルまで続きます。--: オプション処理を中断し、次の単語が-で始まっていてもキーとして解釈されるように強制します。-u(または無効なオプション) : 使用法メッセージを表示します。
keyは単一の文字または文字列で指定できます。文字列にコマンドがバインドされている場合、文字列の最初の文字はシーケンスのリードインとして、全体の文字列はコマンドにバインドされます。
keyの制御文字はリテラル(通常はエディタコマンドquoted-insertにバインドされた^Vを使って入力できます)として入力でき、またはキャレット記号形式(例:^A)で記述できます。削除は^?(キャレットクエスチョンマーク)で記述されます。
keyおよびcommandは、System V echo(1)スタイルでバックスラッシュエスケープシーケンスを含むことができます。例えば:
\a: ベル\b: バックスペース\e: エスケープ\f: フォームフィード\n: 改行\r: キャリッジリターン\t: 水平タブ\v: 垂直タブ\nnn: 8進数nnnに対応するASCII文字
バックスラッシュ(\)は、次に続く文字が特別な意味を持つ場合、その意味を無効にします。特に、\および^の特別な意味を無効にします。
bs2cmd bs2000-command (+)
BS2000コマンドインタープリタにbs2000-commandを渡して実行します。実行できるのは非対話型のコマンドのみで、現在のプロセスのイメージを上書きするようなコマンド(例えば/EXECUTEや/CALL-PROCEDURE)の実行はできません。(BS2000専用)
break
最も近いforeachまたはwhileの終了後に実行を再開させます。現在の行の残りのコマンドが実行されます。複数レベルのbreakを1行で書くことで実行できます。
breakswswitch文から抜け、endswの後で実行を再開します。
builtins (+)
すべての組み込みコマンドの名前を表示します。
bye (+)logout組み込みコマンドの別名です。シェルがそのようにコンパイルされている場合のみ利用可能です。versionシェル変数を参照してください。
case label:
以下で説明するswitch文のラベルです。
cd [-p] [-l] [-n|-v] [name]
ディレクトリ名が指定された場合、シェルの作業ディレクトリをnameに変更します。指定がなければホームディレクトリに変更します。nameが-の場合、前の作業ディレクトリに変更されます(他の置換を参照)。
nameが現在のディレクトリのサブディレクトリでない場合(/、./、../で始まらない場合)、cdpath変数の各コンポーネントがサブディレクトリ名を持っているかチェックされます。最後に、nameがシェル変数で、その値が/で始まる場合、それがディレクトリであるかどうかが試されます。
-pを指定すると、最終的なディレクトリスタックをdirsのように表示します。-l、-n、-vフラグはcdにもdirsと同様に適用され、-pを意味します。
詳細はimplicitcdシェル変数を参照してください。
chdircd組み込みコマンドの別名。
complete [command [word/pattern/list[:select]/[[suffix]/] ...]] (+)
引数なしで実行すると、すべての補完を一覧表示します。command を指定すると、そのコマンドの補完を一覧表示します。 command と word などを指定すると、補完を定義します。
command は完全なコマンド名またはグロブパターン(ファイル名の置換参照)で指定できます。 command が-で始まる場合、補完はコマンドが曖昧な場合にのみ使用されることを意味します。
word は現在の単語に対して補完されるべき単語を指定し、次のいずれかで指定できます:
c: 現在の単語の補完。パターンは現在の単語の始まりと一致する必要があります。C:cと同様だが、現在の単語も補完対象に含めます。n: 次の単語の補完。パターンは前の単語の始まりと一致する必要があります。N:nと同様ですが、2つ前の単語の始まりと一致する必要があります。p: 位置依存の補完。パターンはシェル変数のインデックス構文と同じ形式で、現在の単語を含む必要があります。
list (補完候補のリスト)は、次のいずれかである可能性があります:
a: エイリアスb: バインディング(エディタコマンド)c: コマンド(組み込みまたは外部コマンド)C: 指定されたパスプレフィックスで始まる外部コマンドd: ディレクトリD: 指定されたパスプレフィックスで始まるディレクトリe: 環境変数f: ファイル名F: 指定されたパスプレフィックスで始まるファイル名g: グループ名j: ジョブl: 制限n: 何もしないs: シェル変数S: シグナルt: プレーン(テキスト)ファイルT: 指定されたパスプレフィックスで始まるプレーン(テキスト)ファイルv: 任意の変数u: ユーザー名x:nと同様ですが、選択肢が表示された場合にselectを表示X: 補完候補$var: 変数varの単語(...): 指定されたリストの単語'...': コマンド出力から得られた単語
select はオプションのグロブパターンです。指定された場合、リスト内の選択と一致する単語のみが考慮され、fignoreシェル変数は無視されます。最後の3つの補完タイプには選択パターンを使用できません。また、xは、list-choicesエディタコマンドを使用する際に選択を説明するメッセージとして選択パターンを使用します。
suffix は、成功した補完に追加される単一の文字です。指定しない場合、文字は追加されません。省略した場合(この場合、4番目の区切り文字も省略できます)、ディレクトリにはスラッシュが、その他の単語にはスペースが追加されます。
'...' から呼び出されるコマンドは、追加の環境変数が設定されます。その変数名は COMMAND_LINE で、現在(既に入力された)コマンドラインの内容が含まれています。COMMAND_LINE 変数の内容をカスタムスクリプト内で調べて、より洗練された補完を作成することができます(パッケージに含まれる svn(1) の補完を参照)。
いくつかの例
いくつかのコマンドは引数としてディレクトリのみを受け取るため、通常のファイルを補完する意味はありません。
1> complete cd 'p/1/d/'
このコマンドは cd に続く最初の単語(p/1)のみをディレクトリとして補完します。p タイプの補完を使用して、コマンド補完を絞り込むこともできます。
1> co[^D]
このコマンドは、co*(co で始まるすべてのコマンド)に一致するファイルのリストを compress という唯一の単語に補完します。先頭の - は、この補完が曖昧なコマンドにのみ使用されることを示します。
1> complete find 'n/-user/u/'
これは n タイプの補完例です。find の後で -user に続く単語がユーザーリストから補完されます。
1> complete cc 'c/-I/d/'
これは c タイプの補完を示しています。cc の後で -I で始まる単語がディレクトリとして補完されます。-I はディレクトリの一部とは見なされません。
異なるコマンドには異なるリストが有用です。
1> complete alias 'p/1/a/'
2> complete man 'p/*/c/'
3> complete set 'p/1/s/'
4> complete true 'p/1/x:Truth has no options./'
これらはそれぞれ、alias に続く単語をエイリアスで補完し、man にはコマンドで、set にはシェル変数で補完します。true にはオプションがないため、x は何もしません。
変数を使用した補完も可能です。
1> complete ftp 'p/1/$hostnames/'
1> set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu)
2> ftp [^D]
3rtfm.mit.edu tesla.ee.cornell.edu
コマンドが補完時に実行される場合もあります。
1> complete kill 'p/*/'ps | awk \{print\ \$1\}'/'
複数の補完を持つコマンドもあります。
1> complete dbx 'p/2/(core)/' 'p/*/c/'
このコマンドは、dbx に続く第二引数を core とし、それ以外の引数をコマンドとして補完します。位置補完が次の単語補完の前に指定されているため、誤って位置補完が常に実行されないことを防げます。
select パターンは、特定の形式のファイルのみを引数として受け取るコマンドに便利です。例えば、
1> complete cc 'p/*/f:*.[cao]/'
これは cc 引数を .c、.a、または .o で終わるファイルに補完します。また、select パターンを使用してファイルを除外することもできます。
1> complete rm 'p/*/f:^*.{c,h,cc,C,tex,1,man,l,y}/'
これにより、rm 補完からソースコードが除外されます。
C、D、F、T リストはそれぞれ c、d、f、t に似ていますが、select 引数を異なる方法で使用します。たとえば、Elm メールプログラムでは = を自分のメールディレクトリの省略形として使用します。
1> complete elm c@=@F:$HOME/Mail/@
このコマンドは elm -f = を elm -f ~/Mail/ のように補完します。
最後に、次のような複雑な例もあります:
1> complete find \
2'n/-name/f/' 'n/-newer/f/' 'n/-{,n}cpio/f/' \
3'n/-exec/c/' 'n/-ok/c/' 'n/-user/u/' \
4'n/-group/g/' 'n/-fstype/(nfs 4.2)/' \
5'n/-type/(b c d f l p s)/' \
6'c/-/(name newer cpio ncpio exec ok user \
7group fstype type atime ctime depth inum \
8ls mtime nogroup nouser perm print prune \
9size xdev)/' \
10'p/*/d/'
これは find コマンドの後の引数をさまざまなオプションに応じて補完する例です。
補完は実験的な機能であり、シェルの将来のバージョンで構文が変更される可能性があることに注意してください。 uncomplete 組み込みコマンドも参照してください。
continue
最寄りのwhileまたはforeachの実行を継続します。現在の行の残りのコマンドは実行されます。
defaultswitch文におけるデフォルトケースを示します。すべてのcaseラベルの後に記述する必要があります。
dirs [-l] [-n|-v]dirs -S|-L [filename] (+)dirs -c (+)
最初の形式はディレクトリスタックを表示します。スタックのトップは左側にあり、スタックの最初のディレクトリは現在のディレクトリです。-lオプションを指定すると、出力における~または~nameはユーザー名のホームディレクトリのパス名に明示的に展開されます。 (+) -nオプションを指定すると、エントリは画面の端に達する前に折り返されます。 (+) -vオプションを指定すると、エントリはスタックの位置を前置きして1行ずつ表示されます。 (+) -nまたは-vが複数指定された場合、-vが優先されます。-pは受け入れられますが、何も効果はありません。
-Sオプションを指定した場合、2番目の形式ではディレクトリスタックをファイルに保存します。ファイルは一連のcdおよびpushdコマンドとして保存されます。-Lオプションを指定すると、シェルはファイルを読み込みます。ファイルは-Sオプションまたはsavedirsメカニズムで保存されたディレクトリスタックファイルであると予想されます。いずれの場合も、filenameが指定されていない場合はdirsfileが使用され、dirsfileが設定されていない場合は~/.cshdirsが使用されます。
ログインシェルは起動時にdirs -Lと同等の操作を行い、savedirsが設定されている場合、終了時にdirs -Sを実行します。通常、~/.tcshrcが~/.cshdirsよりも前に読み込まれるため、dirsfileは~/.tcshrcで設定するべきです。
最後の形式はディレクトリスタックをクリアします。
echo [-n] word ...
各単語をシェルの標準出力に書き込みます。単語はスペースで区切られ、改行で終了します。echo_styleシェル変数を設定することで、BSDおよび/またはSystem V版echoのフラグやエスケープシーケンスをエミュレート(またはエミュレートしない)することができます。詳細はecho(1)を参照してください。
echotc [-sv] arg ... (+)
ターミナルの能力(termcap(5)参照)を引数で実行します。例えば、echotc home はカーソルをホーム位置に移動し、echotc cm 3 10 はカーソルを列3、行10に移動させ、echotc ts 0; echo "This is a test."; echotc fs はステータスラインに「This is a test.」を表示します。
引数が 'baud'、'cols'、'lines'、'meta'、'tabs' のいずれかの場合、その能力の値を表示します("yes" または "no"、つまりターミナルがその能力を持っているかどうかを示します)。例えば、次のように使用して、遅い端末でシェルスクリプトの出力を簡素化したり、画面上の行数に制限をかけたりできます:
1> set history='echotc lines'
2> @ history--
termcap文字列にはワイルドカードが含まれている場合があり、正しく表示されないことがあります。そのため、ターミナル能力文字列をシェル変数に設定する際は、次のようにダブルクォーテーションを使用するべきです:
1> set tosl="'echotc ts 0'"
2> set frsl="'echotc fs'"
3> echo -n "$tosl"; date; echo -n "$frsl"
-s を使用すると、存在しない機能はエラーを引き起こすのではなく、空の文字列を返します。-v を指定すると、メッセージが冗長になります。
elseendendifendsw
以下のforeach、if、switch、およびwhile文の説明を参照してください。
eval arg ...
引数をシェルへの入力として処理し、現在のシェルのコンテキスト内でその結果として生成されたコマンドを実行します。これは通常、コマンドや変数の展開結果として生成されたコマンドを実行するために使用されます。なぜなら、解析はこれらの展開の前に行われるからです。evalの使用例については、tset(1)を参照してください。
exec command
指定されたコマンドを現在のシェルの代わりに実行します。
exit [expr]
シェルを終了します。指定されたexpr(式、Expressionsセクションで説明)を値として返すか、exprが指定されていない場合は0を返して終了します。
fg [%job ...]
指定されたジョブ(または引数が指定されていない場合、現在のジョブ)を前面に持ってきて、停止している場合はその実行を再開します。jobは番号、文字列、''、'%'、'+'、'-'のいずれかで、これらはJobsセクションで説明されています。run-fg-editorエディタコマンドも参照してください。
filetest -op file ... (+)op(File inquiry operatorsセクションで説明されるファイル調査演算子)を各ファイルに適用し、その結果をスペース区切りのリストとして返します。
foreach name (wordlist)
...
end
順番にwordlistの各要素を変数nameに設定し、このコマンドと一致するendの間のコマンド群を実行します。(foreachとendは別々の行に記述する必要があります。)組み込みコマンドcontinueを使うと、ループを早期に継続させることができ、breakを使うとループを早期に終了させることができます。このコマンドが端末から読み取られると、ループ内のいかなるコマンドが実行される前に、'foreach? '(またはprompt2)というプロンプトが表示されます。端末でループを入力する際に間違いを犯した場合、誤入力を取り消すことができます。
getspath (+)
システムの実行パスを表示します。(TCFのみ)
getxvers (+)
実験的なバージョンプレフィックスを表示します。(TCFのみ)
glob wordlistechoと似ていますが、-nパラメータは認識されず、出力の単語はヌル文字で区切られます。シェルを使用して単語のリストをファイル名展開する必要があるプログラムに役立ちます。
goto wordwordはファイル名で、コマンド置換されてlabelの形式の文字列が生成されます。シェルはできるだけ入力を巻き戻し、label:の形式の行を検索し(前に空白やタブがある場合もあります)、その行の後で実行を再開します。
hashstat
内部のハッシュテーブルがコマンドを見つけるのにどれほど効果的だったかを示す統計行を表示します(execを避けるため)。ハッシュ関数がヒットしそうなパスの各コンポーネントについて、execが試みられ、/で始まらない各コンポーネントについても試みられます。
vfork(2)がないマシンでは、ハッシュバケットの数とサイズのみが表示されます。
history [-hTr] [n]history -S|-L|-M [filename] (+)history -c (+)
最初の形式は履歴イベントリストを表示します。nが指定されると、最も最近のn個のイベントのみが表示または保存されます。-hオプションを指定すると、履歴リストは番号なしで表示されます。-Tオプションを指定すると、タイムスタンプもコメント形式で表示されます。(これを使って、history -Lやsource -hで読み込むのに適したファイルを作成できます。)-rオプションを指定すると、最も最近のイベントが最初に表示されます。
-Sオプションを指定した場合、2番目の形式では履歴リストをファイルに保存します。savehistシェル変数の最初の単語が数値に設定されていれば、その数だけの行が保存されます。savehistの2番目の単語がmergeに設定されていれば、既存の履歴ファイル(ある場合)と履歴リストが統合され、タイムスタンプ順に並べ替えられます。(+)統合は、複数のシェルが同時に使用されるような環境(例えばX Window System)で利用されます。現在、この機能はシェルが順番に終了する場合のみ成功します。
-Lオプションを指定すると、シェルは履歴リストをファイルに追加します。このファイルは-Sオプションまたはsavehistメカニズムによって保存された履歴リストであると予想されます。-Mオプションは-Lに似ていますが、ファイルの内容が履歴リストに統合され、タイムスタンプ順に並べ替えられます。いずれの場合も、filenameが指定されていない場合はhistfileが使用され、histfileが未設定の場合は~/.historyが使用されます。history -Lはsource -hと全く同じですが、ファイル名を必要としません。
ログインシェルは起動時にhistory -Lと同等の操作を行い、savehistが設定されている場合、終了時にhistory -Sを実行します。通常、~/.tcshrcが~/.historyより先に読み込まれるため、histfileは~/.tcshrcに設定するべきです。
histlitが設定されている場合、最初と2番目の形式は履歴リストのリテラル(展開されていない)形式を表示および保存します。
最後の形式は履歴リストをクリアします。
hup [command] (+)commandが指定された場合、そのコマンドを実行し、ハングアップシグナルを受け取った際に終了するようにします。また、シェルが終了する際にそのコマンドにハングアップシグナルを送信するように手配します。コマンドは自身でハングアップ信号に対する応答を設定することができ、hupの設定を上書きすることがあります。引数が指定されていない場合(シェルスクリプト内でのみ許可される)は、スクリプトの残りの部分でシェルがハングアップ信号を受け取った際に終了します。Signal handlingおよびnohup組み込みコマンドも参照してください。
if (expr) commandexpr(式、Expressionsセクションで説明)を評価して真である場合、commandが実行されます。command内の変数展開は早期に行われ、ifコマンドの他の部分と同時に行われます。commandは単純なコマンドでなければなりません。エイリアス、パイプライン、コマンドリスト、または括弧で囲まれたコマンドリストではなく、引数を持つことはできます。入力/出力のリダイレクションは、exprが偽でcommandが実行されない場合でも発生します。これはバグです。
if (expr) then
...
else if (expr2) then
...
else
...
endif
指定されたexprが真であれば、最初のelseに続くコマンドが実行されます。そうでなければ、expr2が真であれば、2番目のelseに続くコマンドが実行されます。など、else-ifのペアは任意の数だけ記述可能です。endifは1つだけ必要です。else部分も省略可能です。(elseおよびendifは入力行の先頭に現れなければならず、ifはその入力行に単独で現れるか、elseの後に記述されなければなりません。)
inlib shared-library ... (+)
各共有ライブラリを現在の環境に追加します。共有ライブラリを削除する方法はありません。(Domain/OSのみ)
jobs [-l]</span> アクティブなジョブをリスト表示します。-l`オプションを指定すると、通常の情報に加えてプロセスIDも表示されます。TCFシステムでは、各ジョブが実行されているサイトも表示されます。
kill [-s signal] %job|pid ...kill -l
最初と2番目の形式は、指定された信号(または指定されない場合はTERM(終了)信号)を指定されたジョブまたはプロセスに送信します。jobは番号、文字列、''、'%'、'+'、'-'のいずれかで、これらはJobsセクションで説明されています。信号は番号または名前(/usr/include/signal.hに記載されている名前、SIGプレフィックスを除いたもの)で指定できます。デフォルトのジョブはありません。「kill」とだけ記述しても、現在のジョブには信号は送信されません。送信する信号がTERM(終了)またはHUP(ハングアップ)の場合、ジョブまたはプロセスには同時にCONT(続行)信号も送信されます。3番目の形式は信号名をリスト表示します。
limit [-h] [resource [maximum-use]]
現在のプロセスとその作成する各プロセスの指定されたリソースの消費量を、maximum-useを超えないように制限します。maximum-useが指定されていない場合は、現在の制限値が表示されます。resourceが指定されていない場合は、すべての制限が表示されます。-hフラグが指定されると、現在の制限ではなくハードリミットが使用されます。ハードリミットは現在のリミットの上限を設定します。ハードリミットはスーパーユーザーのみが引き上げることができ、ユーザーは合法的な範囲内で現在のリミットを引き下げたり引き上げたりすることができます。
現在制御可能なリソースには、次のものがあります(OSがサポートしている場合):
- cputime - 各プロセスが使用する最大CPU秒数。
- filesize - 作成可能な最大の単一ファイルサイズ。
- datasize -
プログラムのテキスト領域の末尾から
brk(2)によるデータ+スタック領域の最大増加量。 - stacksize - 自動的に拡張されるスタック領域の最大サイズ。
- coredumpsize - 作成される最大のコアダンプサイズ。
- memoryuse - プロセスが同時に割り当てることができる最大物理メモリ量(2.6カーネルでは未実装。値は意味を持たず、この値を変更しても効果はありません)。
- heapsize -
brk()システムコールでプロセスが割り当てることができる最大メモリ量。 - descriptors or openfiles - プロセスが保持できる最大のオープンファイル数。
- concurrency - プロセスが作成できる最大スレッド数。
- memorylocked -
mlock(2)を使ってプロセスがメモリにロックできる最大サイズ。 - maxproc - このユーザーIDで同時に作成できるプロセスの最大数。
- sbsize - このユーザーの最大ソケットバッファ使用量。
- swapsize - このユーザーのために予約または使用される最大スワップ領域。
maximum-useは(浮動小数点数または整数として)数値の後にスケールファクターを付けて指定できます。cputime以外のすべての制限にはデフォルトで「k」または「キロバイト(1024バイト)」のスケールが使用され、また「m」や「メガバイト」を使用することもできます。cputimeにはデフォルトで「秒」がスケーリング単位として使われ、m(分)やh(時間)、または「mm:ss」形式で分と秒を指定することもできます。
リソース名やスケールファクターには、名前の明確な接頭辞を使うことができます。
log (+)watchシェル変数を表示し、指定された各ユーザーについて、最後にログインした時刻に関係なく、現在ログインしている状態を報告します。watchlogも参照してください。
login
ログインシェルを終了し、/bin/loginのインスタンスに置き換えます。これはログオフの一つの方法で、sh(1)との互換性のために含まれています。
logout
ログインシェルを終了します。特にignoreeofが設定されている場合に有用です。
ls-F [-switch ...] [file ...] (+)ls -Fのようにファイルをリスト表示しますが、はるかに高速です。リストに表示される各ファイルタイプは、特定の文字で識別されます:
/: ディレクトリ*: 実行可能ファイル#: ブロックデバイス%: キャラクターデバイス|: 名前付きパイプ(名前付きパイプをサポートするシステムのみ)=: ソケット(ソケットをサポートするシステムのみ)@: シンボリックリンク(シンボリックリンクをサポートするシステムのみ)+: 隠しディレクトリ(AIXのみ)またはコンテキストに依存(HP/UXのみ):: ネットワーク専用(HP/UXのみ)
listlinksシェル変数が設定されている場合、シンボリックリンクはより詳細に識別されます(シンボリックリンクをサポートするシステムのみ)。以下のように表示されます:
@: ディレクトリ以外へのシンボリックリンク>: ディレクトリへのシンボリックリンク&: 存在しないシンボリックリンク(リンク先がない)
listlinksはls-Fの速度を低下させ、シンボリックリンクが指し示すファイルがあるパーティションをマウントする原因となることがあります。
listflagsシェル変数が設定されている場合、例えば 'x'、'a'、'A' などのフラグがls-Fに渡され、ls -xF、ls -Fa、ls -FA、またはその組み合わせのように動作します(例えば、ls -FxA)。デフォルトでls -Cが設定されていないマシンでは、ls-Fはls -CFのように動作しますが、listflagsに'x'が含まれている場合、ls -xFのように動作します。
ls-Fはファイルタイプや拡張子に応じて異なる色でファイルをリスト表示できます。これにはcolor tcsh変数やLS_COLORS環境変数を使用します。
migrate [-site] pid|%jobid ... (+)migrate -site (+)
最初の形式は、プロセスまたはジョブを指定されたサイト、またはシステムパスによって決定されたデフォルトのサイトに移行します。2番目の形式は 'migrate -site $$' と同等で、現在のプロセスを指定されたサイトに移行します。シェル自体を移行することは予期しない動作を引き起こす可能性があります。なぜなら、シェルはそのtty(端末)を失うことを好まないためです。(TCFのみ)
newgrp [-] group (+)
'exec newgrp' と同等です。詳細は newgrp(1) を参照してください。シェルがそのようにコンパイルされていれば使用可能です。シェルのバージョン変数を確認してください。
nice [+number] [command]
シェルのスケジューリング優先度を number に設定します。number が指定されない場合は、デフォルトで 4 に設定されます。command を指定すると、そのコマンドが適切な優先度で実行されます。number が大きいほど、そのプロセスは CPU を少なく使用します。スーパーユーザーは 'nice -number ...' を使って負の優先度を指定できます。command は常にサブシェル内で実行され、単純な if 文内でコマンドに制約が課されます。
nohup [command]
command を指定すると、hangup シグナルを無視して実行されます。コマンド自体が hangup に対する応答を設定し、nohup を上書きする場合があることに注意してください。引数なしで(シェルスクリプト内のみ許可)、スクリプトの残りの部分に対してシェルが hangup を無視するようになります。詳細は Signal handling と hup 組み込みコマンドを参照してください。
notify [%job ...]
指定されたジョブ(または、%job が指定されていない場合は現在のジョブ)の状態が変わった際に、次のプロンプトを待つ代わりに非同期的にユーザーに通知します。job は番号、文字列、''、'%'、'+'、または '-' として指定できます(詳細は Jobs を参照)。notify シェル変数も参照してください。
onintr [-|label]
割り込みに対するシェルの動作を制御します。引数なしの場合、シェルの割り込みに対するデフォルトの動作が復元されます。デフォルトでは、シェルスクリプトを終了させるか、ターミナルコマンド入力レベルに戻ります。'-' を指定すると、すべての割り込みを無視します。label を指定すると、割り込みを受け取ったときや、子プロセスが割り込みで終了したときに、シェルが 'goto label' を実行します。
onintr はシェルがデタッチされていてシステムのスタートアップファイル内で実行されている場合(割り込みが無効になっている場合)には無視されます。
popd [-p] [-l] [-n|-v] [+n]
引数なしで実行すると、ディレクトリスタックからディレクトリをポップし、新しいトップディレクトリに戻ります。'+n' の番号を指定すると、スタック内の n'th エントリを破棄します。
最後に、すべての popd の形式は、dirs と同様に最終的なディレクトリスタックを表示します。これを防ぐために pushdsilent シェル変数を設定することができ、-p フラグを指定することで pushdsilent をオーバーライドできます。-l, -n, -v フラグは、dirs と同様に popd にも同じ効果を持ちます。
printenv [name] (+)
すべての環境変数の名前と値を表示します。また、name を指定すると、その環境変数の値を表示します。
pushd [-p] [-l] [-n|-v] [name|+n]
引数なしで実行すると、ディレクトリスタックのトップの2つの要素を交換します。pushdtohome が設定されている場合、引数なしでの pushd は pushd ~ と同じ動作をし、cd と同様になります。
name を指定すると、現在の作業ディレクトリをディレクトリスタックにプッシュし、name に変更します。name が '-' の場合、これは前回の作業ディレクトリとして解釈されます(ファイル名置換参照)。
dunique が設定されている場合、pushd はスタックにプッシュする前に name のインスタンスをスタックから削除します。
'+n' の番号を指定すると、ディレクトリスタック内の n 番目の要素をトップに回転させ、そのディレクトリに変更します。もし dextract が設定されている場合、'pushd +n' は n 番目のディレクトリを抽出し、それをスタックのトップにプッシュして変更します。
最後に、すべての pushd の形式は、dirs と同様に最終的なディレクトリスタックを表示します。これを防ぐために pushdsilent シェル変数を設定することができ、-p フラグを指定することで pushdsilent をオーバーライドできます。-l, -n, -v フラグは、dirs と同様に pushd にも同じ効果を持ちます。
rehash
path 変数内のディレクトリの内容に対する内部ハッシュテーブルを再計算します。これが必要なのは、ログイン中に path 内のディレクトリに新しいコマンドが追加された場合です。通常は、自分のディレクトリにコマンドを追加した場合、またはシステムプログラマがシステムディレクトリの内容を変更した場合にのみ必要です。また、チルダ展開によって作成されたホームディレクトリのキャッシュもフラッシュされます。
repeat count command
指定されたコマンドは、count 回実行されます。コマンドには、上記の単一行 if 文と同じ制限が適用されます。I/O リダイレクションは、count が 0 であっても、1 回だけ実行されます。
rootnode //nodename (+)
rootnode を //nodename に変更し、'/' が '//nodename' として解釈されるようにします。(Domain/OS のみ)
sched (+)sched [+]hh:mm command (+)sched -n (+)
最初の形式はスケジュールされたイベントのリストを表示します。schedシェル変数を設定して、表示形式を変更できます。
2番目の形式は、指定した時刻 hh:mm に command を実行するようにスケジュールします。例えば、
1sched 11:00 echo It's eleven o'clock.
とすると、午前11時に「It's eleven o'clock.」というメッセージが表示されます。時刻は12時間制(AM/PM)または24時間制で指定できます。相対的な時刻指定も可能で、例えば以下のように指定できます。
1sched +2:15 /usr/lib/uucp/uucico -r1 -sother
これは現在時刻から2時間15分後にコマンドを実行します。ただし、相対時刻ではAM/PM形式は使えません。
3番目の形式は、イベントリストから指定した番号 n のイベントを削除します。例えば、
1sched
21 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother
32 Wed Apr 4 17:00 set prompt='[%h] It's after 5; go home: >'
と表示されている場合に、
1sched -2
とすると、2番目のイベントが削除されます。
スケジュールされたコマンドは、指定時刻に最初にプロンプトが表示される直前に実行されます。指定時刻に正確に実行されない場合もありますが、次回のプロンプトで実行されます。また、シェルがユーザーの入力を待っている間に指定時刻が来た場合、コマンドは即座に実行されます。ただし、すでに実行中のコマンドは中断されません。
この仕組みは、at(1) コマンドに似ていますが、まったく同じではありません。最大の欠点は、コマンドが指定された時刻に正確に実行されないことですが、最大の利点は、シェルから直接実行されるため、シェル変数やその他のシェルの構造にアクセスできる点です。これにより、時間帯に基づいて作業環境を変更するための機能を提供します。
setset name ...set name=word ...set [-r] [-f|-l] name=(wordlist) ... (+)set name[index]=word ...set -r (+)set -r name ... (+)set -r name=word ... (+)
最初の形式は、すべてのシェル変数の値を表示します。変数が複数の単語を含んでいる場合、その値は括弧付きの単語リストとして表示されます。
2番目の形式は、変数 name に空文字列を設定します。
3番目の形式は、変数 name に単一の単語を設定します。
4番目の形式は、変数 name に、指定された wordlist の単語リストを設定します。いずれの場合も、値はコマンドとファイル名の展開が行われた後に設定されます。-r オプションを指定すると、変数は読み取り専用として設定されます。-f または -l オプションを指定した場合、リストの中でユニークな単語のみが保持され、その順序が維持されます。-f は最初に出現した単語を優先し、-l は最後に出現した単語を優先します。
5番目の形式は、変数 name の index 番目のコンポーネントを word に設定します。このコンポーネントは既に存在している必要があります。
6番目の形式は、すべての読み取り専用シェル変数の名前のみをリストします。
7番目の形式は、変数 name を読み取り専用に設定します。これにより、変数に値が設定されていない場合でも、読み取り専用にされます。
8番目の形式は、3番目の形式と同様ですが、同時に変数 name を読み取り専用に設定します。
これらの引数は繰り返して使うことができ、1回の set コマンドで複数の変数を設定または読み取り専用にすることができます。ただし、変数の展開は設定が行われる前にすべての引数に対して行われることに注意してください。また、= は変数名と値の両方に隣接させることもできますが、片方にだけ隣接させることはできません。
setenv [name [value]]
引数なしで実行すると、すべての環境変数の名前と値を表示します。nameが指定されると、環境変数nameをvalueに設定するか、valueが指定されていなければ空文字列に設定します。
setpath path (+)
setpath(1)と同等です。(Mach専用)
setspath LOCAL|site|cpu ... (+)
システムの実行パスを設定します。(TCF専用)
setenv [name [value]]
引数なしの場合、すべての環境変数の名前と値を表示します。nameが指定されると、環境変数nameをvalueに設定します。valueが指定されない場合、空文字列に設定されます。
setpath path (+)
setpath(1)と同等です。(Mach専用)
setspath LOCAL|site|cpu ... (+)
システム実行パスを設定します。(TCF専用)
settc cap value (+)
シェルに端末の能力cap(termcap(5)で定義された)をvalueに設定するよう指示します。サニティチェックは行われません。Concept端末ユーザーは、右端の列で適切なラッピングを行うために「settc xn no」を実行する必要があるかもしれません。
setty [-d|-q|-x] [-a] [[+|-]mode] (+)
シェルが変更を許可しないttyモード(端末管理を参照)を制御します。-d、-q、-xのいずれかを指定すると、それぞれ「edit」、「quote」、「execute」のttyモードセットに対してsettyが作用します。-d、-q、-xが指定されない場合、デフォルトで「execute」が使用されます。
他の引数がない場合、settyは選択されたセット内の固定されたモード('+mode')またはオフのモード('-mode')を一覧表示します。-aを指定すると、固定されているかどうかに関係なく、選択されたセット内のすべてのttyモードを一覧表示します。+mode、-mode、またはmodeを指定すると、選択されたセット内でモードをオンまたはオフに固定したり、制御を解除したりします。例えば、「setty +echok echoe」は、'echok'モードをオンに固定し、'echoe'モードをオンまたはオフに切り替えることを許可します。これらはシェルがコマンドを実行している間に適用されます。
setxvers [string] (+)
実験的なバージョンプレフィックスをstringに設定します。stringが省略されると、プレフィックスが削除されます。(TCF専用)
shift [variable]
引数なしの場合、argv[1]を破棄し、argvのメンバーを左にシフトします。argvが設定されていない、または1つ以上の単語を値として持たない場合はエラーです。variableが指定されると、variableに対して同じ操作を行います。
source [-h] name [args ...]
シェルはnameからコマンドを読み込み実行します。コマンドは履歴リストには追加されません。引数が指定された場合、それらはargvに格納されます。 (+) sourceコマンドは入れ子にすることができますが、あまり深く入れ子にするとシェルがファイルディスクリプタを使い果たす可能性があります。任意のレベルでのsourceコマンドのエラーは、すべての入れ子にされたsourceコマンドを終了させます。-hを指定すると、コマンドは実行されるのではなく履歴リストに追加されます。これは「history -L」のような動作です。
stop %job|pid ...
指定したジョブまたはバックグラウンドで実行中のプロセスを停止します。jobは番号、文字列、''、'%'、'+'、または'-'で指定できます(Jobs参照)。デフォルトのジョブはありません。「stop」だけでは現在のジョブは停止しません。
suspend
シェルをその場で停止させます。これは、シェルが^Zで停止信号を受け取ったかのように動作します。主にsu(1)で開始されたシェルを停止させるために使用されます。
switch (string)
case str1:
...
breaksw
...
default:
...
breaksw
endsw
各caseラベルは、最初にコマンドおよびファイル名の展開が行われた指定された文字列と順番に照合されます。ファイルのメタキャラクタ「*」、「?」、「[...]」は、caseラベルで使用でき、これらは変数展開されます。もし、'default'ラベルが見つかる前にラベルが一致しなかった場合、実行はdefaultラベルの後から開始されます。各caseラベルとdefaultラベルは行の先頭に記述する必要があります。コマンド「breaksw」は実行をendswの後に続けさせます。それ以外の場合、制御はCのようにcaseラベルとdefaultラベルを通過します。もし、ラベルが一致せず、defaultがない場合、実行はendswの後から続行されます。
telltc (+)
すべての端末能力の値をリスト表示します(termcap(5)参照)。
termname [terminal type] (+)
端末タイプ(端末タイプが指定されていない場合は現在のTERMの値)がhostsのtermcap(5)またはterminfo(5)データベースにエントリがあるかどうかを確認します。端末タイプを標準出力に表示し、エントリが存在すれば0を返し、存在しなければ1を返します。
time [command]
コマンド(単純なコマンドである必要があり、エイリアスやパイプライン、コマンドリスト、括弧付きコマンドリストではありません)を実行し、time変数で説明される時間の概要を表示します。必要に応じて、コマンドの実行が終了した際に時間統計を表示するために追加のシェルが作成されます。コマンドが指定されていない場合、現在のシェルとその子シェルの時間概要が表示されます。
umask [value]
ファイル作成マスクをvalue(8進数で指定)に設定します。マスクの一般的な値は002で、グループにはすべてのアクセスを、他のユーザーには読み取りおよび実行アクセスを与え、022はグループと他のユーザーに読み取りおよび実行アクセスを与えます。valueが指定されない場合、現在のファイル作成マスクが表示されます。
unalias pattern
名前がpatternに一致するすべてのエイリアスを削除します。'unalias *'はすべてのエイリアスを削除します。何も削除されなくてもエラーではありません。
uncomplete pattern (+)
名前がpatternに一致するすべての補完を削除します。'uncomplete *'はすべての補完を削除します。何も削除されなくてもエラーではありません。
unhash
実行されたプログラムの位置を高速化するための内部ハッシュテーブルの使用を無効にします。
universe universe (+)
universeをuniverseに設定します。(Masscomp/RTU専用)
unlimit [-hf] [resource]
resourceに対する制限を解除します。また、リソースが指定されていない場合、すべてのリソース制限を解除します。-hを指定すると、対応するハードリミットが解除されます。これを実行できるのはスーパーユーザーのみです。なお、unlimitが成功しない場合があることに注意してください。ほとんどのシステムでは、ディスクリプタを無制限にすることが許可されていません。-fを指定すると、エラーは無視されます。
unset pattern
名前がpatternに一致するすべての変数を削除します。ただし、それらが読み取り専用の場合は削除されません。'unset *'はすべての変数を削除しますが、読み取り専用の変数は削除されません;これは避けるべきです。何も削除されなくてもエラーではありません。
unsetenv pattern
名前がpatternに一致するすべての環境変数を削除します。'unsetenv *'はすべての環境変数を削除します;これは避けるべきです。何も削除されなくてもエラーではありません。
ver [systype [command]] (+)
引数なしで実行した場合、SYSTYPEを表示します。systypeが指定されると、SYSTYPEをその値に設定します。systypeとcommandが指定されると、systypeの下でcommandを実行します。systypeには'bsd4.3'や'sys5.3'を指定できます。(Domain/OS専用)
wait
シェルはすべてのバックグラウンドジョブが終了するのを待機します。シェルがインタラクティブモードである場合、割り込みがwaitを中断し、すべての未処理ジョブの名前とジョブ番号を表示します。
warp universe (+)
universeをuniverseに設定します。(Convex/OS専用)
watchlog (+)
log組み込みコマンドの別名です(詳細は q.v.)。シェルがこのようにコンパイルされている場合にのみ利用可能です;バージョンシェル変数を参照してください。
where command (+)
commandのすべての既知のインスタンスを報告します。これにはエイリアス、組み込みコマンド、およびパス内の実行可能ファイルが含まれます。
which command (+)
シェルが置換、パス検索などを行った後に実行されるコマンドを表示します。組み込みコマンドは、which(1)と似ていますが、tcshのエイリアスや組み込みコマンドを正しく報告し、10倍から100倍速く動作します。詳細については、whichコマンドエディターコマンドも参照してください。
while (expr)
...
end
whileと対応するendの間のコマンドを実行します。expr(式)は非ゼロに評価される限り実行されます。whileとendはそれぞれ入力行で単独で表示する必要があります。breakやcontinueを使ってループを早期に終了したり続けたりできます。入力が端末の場合、最初のループでユーザーにプロンプトが表示されます(foreachと同様)。
特別なエイリアス(Special aliases) (+)
設定されている場合、これらのエイリアスは指定された時に自動的に実行されます。最初はすべて未定義です。
beepcmd
シェルが端末ベルを鳴らすときに実行されます。
cwdcmd
作業ディレクトリが変更されるたびに実行されます。たとえば、ユーザーがXウィンドウシステム上でxterm(1)を使用し、タイトルバーをサポートする再親子化ウィンドウマネージャ(twm(1)など)を使っている場合、次のように設定できます。
1> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd^G"'
この場合、シェルは実行中のxterm(1)のタイトルをホスト名、コロン、現在の作業ディレクトリに変更します。もっと洗練された方法としては次のように設定できます。
1> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"'
これにより、タイトルバーにはホスト名と作業ディレクトリが表示され、アイコンマネージャーメニューにはホスト名のみが表示されます。
cwdcmd内でcd、pushd、popdを使用すると無限ループが発生する可能性があるので注意してください。著者は、これを行う人はその結果を受け入れるべきだと考えています。
jobcmd
各コマンドが実行される前、またはコマンドが状態を変更する際に実行されます。これはpostcmdに似ていますが、組み込みコマンドは表示されません。
1> alias jobcmd 'echo -n "^[]2\;\!#:q^G"'
これを設定すると、vi foo.cを実行した際にコマンド文字列がxtermのタイトルバーに表示されます。
helpcommandrun-helpエディタコマンドによって呼び出されます。ヘルプを求めるコマンド名が唯一の引数として渡されます。例えば、次のように設定すると:
1> alias helpcommand '\!:1 --help'
この設定では、コマンド自体のヘルプ表示がGNUのヘルプ呼び出し規約を使って表示されます。現在のところ、さまざまな呼び出し規約(例えば、慣習的なUnixの-hオプション)に対応する簡単な方法はなく、代わりに多くのコマンドを格納したテーブルを使用する必要があります。
periodicperiodicは、tperiod分ごとに実行されます。これは、新しいメールの確認など、一般的だが頻繁ではない変更をチェックするための便利な手段です。例えば、次のように設定すると:
1> set tperiod = 30
2> alias periodic checknews
checknews(1)プログラムは30分ごとに実行されます。もしperiodicが設定されているが、tperiodが未設定または0に設定されている場合、periodicはprecmdのように動作します。
precmd
各プロンプトが表示される直前に実行されます。例えば、次のように設定すると:
1> alias precmd date
この設定では、シェルがコマンドを要求する前にdate(1)が実行されます。precmdに設定できる内容に制限はありませんが、慎重に使うべきです。
postcmd
各コマンドが実行される前に実行されます。例えば、次のように設定すると:
1> alias postcmd 'echo -n "^[]2\;\!#:q^G"'
この設定では、vi foo.cを実行した際に、コマンド文字列がxtermのタイトルバーに表示されます。
shell
実行可能スクリプトに対して、スクリプト自身がインタープリタを指定していない場合のインタープリタを指定します。最初の単語は希望するインタープリタへのフルパス名である必要があります(例えば、/bin/cshや/usr/local/bin/tcshなど)。
特別なシェル変数(Special shell variables)
このセクションで説明する変数は、シェルにとって特別な意味を持っています。
シェルは、起動時に addsuffix、argv、autologout、csubstnonl、command、echo_style、edit、gid、group、home、loginsh、oid、path、prompt、prompt2、prompt3、shell、shlvl、tcsh、term、tty、uid、user、および version を設定します。それらはその後ユーザーによって変更されない限り変更されません。シェルは、必要に応じて cwd、dirstack、owd、および status を更新し、ログアウト時に logout を設定します。
シェルは、group、home、path、shlvl、term、および user を、同じ名前の環境変数と同期させます。つまり、環境変数が変更されると、シェルは対応するシェル変数を変更して一致させます(ただし、そのシェル変数が読み取り専用でない場合)。逆も同様です。ただし、cwd と PWD は意味が同じですが、このように同期されることはなく、シェルは path と PATH の異なる形式を自動的に相互変換します。
addsuffix (+)
ディレクトリが完全に一致した場合、ファイル名補完がディレクトリの末尾にスラッシュ(/)を追加し、通常のファイルにはスペースを追加します。デフォルトで設定されています。
afsuser (+)
設定されている場合、autologout の autolock 機能は、ローカルのユーザー名の代わりに、Kerberos 認証のためにその値を使用します。
ampm (+)
設定されている場合、すべての時間が 12 時間制の AM/PM 形式で表示されます。
argv
シェルの引数です。位置引数は argv から取得され、つまり $1 は $argv[1] に置き換えられます。デフォルトで設定されていますが、インタラクティブシェルでは通常空です。
autocorrect (+)
設定されている場合、各補完の試行の前に自動的にスペルチェックコマンドが呼び出されます。
autoexpand (+)
設定されている場合、補完を試みるたびに自動的に expand-history エディタコマンドが呼び出されます。これが onlyhistory に設定されている場合、履歴のみが展開され、2回目の補完でファイル名が展開されます。
autolist (+)
設定されている場合、あいまいな補完の後に候補がリストされます。ambiguous に設定されている場合、補完で新しい文字が追加されない場合にのみ候補がリストされます。
autologout (+)
最初の単語は、非アクティブな状態が続く時間(分)を指定し、その後に自動ログアウトが実行されます。オプションの2番目の単語は、非アクティブ状態が続く時間(分)を指定し、その後に自動ロックが実行されます。シェルが自動的にログアウトする場合、「auto-logout」と表示され、logout 変数が「automatic」に設定されてシェルが終了します。自動的にロックされると、ユーザーは作業を続けるためにパスワードを入力する必要があります。誤った試行が 5 回続くと自動的にログアウトされます。デフォルトでは、ログインシェルおよびスーパーユーザーシェルで「60」に設定されており、60 分の非アクティブ状態後に自動的にログアウトし、ロックは行いません。ただし、シェルがウィンドウシステム(DISPLAY 環境変数が設定されている場合)、擬似端末(pty)で動作している場合、またはそのようにコンパイルされていない場合(version シェル変数を参照)には適用されません。afsuser および logout シェル変数も参照してください。
backslash_quote (+)
設定されている場合、バックスラッシュ(\)は常にバックスラッシュ(\)、シングルクォート(')、ダブルクォート(")をエスケープします。これにより複雑なクォート作業が簡単になる場合がありますが、csh(1) スクリプトで構文エラーを引き起こす可能性もあります。
catalog
メッセージカタログのファイル名です。設定されている場合、tcsh はデフォルトの tcsh の代わりに tcsh.${catalog} をメッセージカタログとして使用します。
cdpathcd がサブディレクトリを検索する際に、現在のディレクトリ内で見つからない場合に検索するディレクトリのリストです。
color
設定されている場合、組み込みコマンド ls-F に対してカラー表示を有効にし、ls コマンドには --color=auto オプションを渡します。代わりに、ls-F または ls のみで色を有効にすることもできます。何も設定しない場合は、(ls-F ls) と同じ効果があります。
colorcat
設定されている場合、NLS(National Language Support)メッセージファイルにカラーエスケープシーケンスを有効にし、カラフルな NLS メッセージを表示します。
command (+)
設定されている場合、-c フラグでシェルに渡されたコマンドが設定されます(詳細は q.v.)。
compat_expr (+)
設定されている場合、シェルは元の csh のように、式を右から左へ評価します。
complete (+)'enhance' に設定すると補完は 1) 大文字と小文字を区別せず、2) ピリオド(.)、ハイフン(-)、アンダースコア(_)を単語の区切り文字として扱い、ハイフンとアンダースコアを同等と見なします。'igncase' に設定すると、補完が大文字と小文字を区別しなくなります。
continue (+)
コマンドのリストが設定されている場合、シェルは新しいコマンドを開始するのではなく、リストにあるコマンドを実行し続けます。
continue_args (+)continue と同様ですが、シェルは次のコマンドを実行します:echo 'pwd' $argv > ~/.<cmd>_pause; %<cmd>
correct (+)
設定されている場合、'cmd' はコマンドの綴りを自動的に訂正します。'complete' はコマンドを自動的に補完します。'all' はコマンドライン全体を訂正します。
csubstnonl (+)
設定されている場合、コマンド置換内の改行やキャリッジリターンはスペースに置き換えられます。デフォルトで設定されています。
cwd
現在のディレクトリの完全なパス名です。dirstack および owd シェル変数も参照してください。
dextract (+)
設定されている場合、pushd +n はディレクトリスタックから nth 番目のディレクトリを取り出します(トップに回転させるのではなく)。
dirsfile (+)dirs -S と dirs -L が履歴ファイルを探すデフォルトの場所です。設定されていない場合、~/.cshdirs が使用されます。通常、~/.tcshrc が ~/.cshdirs より先に読み込まれるため、dirsfile は ~/.login ではなく ~/.tcshrc に設定する必要があります。
dirstack (+)
ディレクトリスタック内のすべてのディレクトリを格納する配列です。$dirstack[1] は現在の作業ディレクトリ、$dirstack[2] はスタックの最初のディレクトリ、などとなります。現在の作業ディレクトリは $dirstack[1] ですが、ディレクトリスタックの置換などでは =0 として扱われます。スタックは任意に変更できますが、最初の要素(現在の作業ディレクトリ)は常に正しい状態になります。cwd および owd シェル変数も参照してください。
dspmbyte (+)dspm が version シェル変数の一部としてリストされている場合にのみ影響を与えます。設定が次の通りの場合、対応するマルチバイトコード(日本語、シフトJIS、UTF-8など)の表示および編集が有効になります。
euc:EUC-JP(日本語)コードを表示および編集。sjis:Shift-JIS(日本語)コードを表示および編集。big5:Big5(中国語)コードを表示および編集。utf8:UTF-8(Unicode)コードを表示および編集。- 256バイトのフォーマットで設定することで、独自のマルチバイトコード形式を表示および編集できます。
このフォーマットでは、256バイトの各文字がASCIIコード(0x00~0xff)に対応し、各バイトが次のように設定されます:
0:マルチバイト文字には使用されない。1:マルチバイト文字の最初のバイトに使用。2:マルチバイト文字の2番目のバイトに使用。3:最初と2番目のバイトの両方に使用。
例えば、set dspmbyte = 001322 の場合、ASCIIコード0x00(最初の文字)と0x01(2番目の文字)は使用されず、0x02(3番目の文字)は最初のバイトとして使用され、0x03(4番目の文字)は両方のバイトとして使用されます。
GNU fileutils版の ls は、-N(--literal)オプションなしではマルチバイトファイル名を表示できません。このバージョンを使用している場合、dspmbyte の2番目の単語を "ls" に設定してください。
注記: この変数は、KANJI と DSPMBYTE がコンパイル時に定義されている場合にのみ使用できます。
dunique (+)
設定されている場合、pushd はスタックにディレクトリをプッシュする前に、スタック内に既に存在する同じ名前のディレクトリを取り除きます。
echo
設定されている場合、各コマンドとその引数が実行される直前に表示(エコー)されます。組み込みでないコマンドについては、すべての展開がエコーの前に行われます。組み込みコマンドはコマンドとファイル名の置換が行われる前にエコーされるため、これらの置換は選択的に実行されます。これはコマンドラインオプション -x によって設定されます。
echo_style (+)echo 組み込みコマンドのスタイルを設定します。次のいずれかに設定できます:
bsd: 最初の引数が-nの場合に改行を表示しません。sysv:echoの文字列内でバックスラッシュによるエスケープシーケンスを認識します。both:-nフラグとバックスラッシュによるエスケープシーケンスの両方を認識します(デフォルト)。none: 両方とも認識しません。
デフォルトでは、システムのローカルな設定に従います。BSDおよびSystem Vオプションの詳細は、対応するシステムの echo(1) マニュアルページで確認できます。
edit (+)
設定されている場合、コマンドラインエディタが使用されます。インタラクティブシェルではデフォルトで設定されています。
ellipsis (+)
設定されている場合、%c / %.' と %C のプロンプトシーケンス(prompt シェル変数参照)は、スキップされたディレクトリを / <skipped> の代わりに省略記号(...)で示します。
fignore (+)
補完時に無視されるファイル名の接尾辞をリストとして設定します。
filectcsh では、補完は常に使用されるため、この変数はデフォルトで無視されます。edit が設定されていない場合、従来の csh の補完が使用されます。csh で設定されている場合、ファイル名補完が有効になります。
gid (+)
ユーザーの実際のグループIDです。
group (+)
ユーザーのグループ名です。
highlight
設定されている場合、インクリメンタル検索の一致部分(i-search-back と i-search-fwd)およびマークとカーソルの間の領域が反転ビデオでハイライトされます。
ハイライトには端末への頻繁な書き込みが必要で、余分なオーバーヘッドを生じるため、端末のパフォーマンスに気を使う場合は、この変数を設定しない方が良いかもしれません。
histchars
履歴置換に使用される文字を決定する文字列値です(詳細は q.v.)。最初の文字は履歴置換のための文字として使用され、デフォルトの文字 ! を置き換えます。2 番目の文字は、クイック置換で使用される ^ を置き換えます。
histdup (+)
履歴リスト内での重複エントリの取り扱いを制御します。次のいずれかの設定が可能です:
all: 履歴リストには一意な履歴イベントのみが追加されます。prev: 最後の履歴イベントが現在のコマンドと同じ場合、現在のコマンドは履歴に追加されません。erase: 履歴リストに同じイベントが見つかった場合、その古いイベントは削除され、現在のイベントが挿入されます。
prev と all オプションは、履歴イベントにギャップがないように再番号付けを行います。
histfile (+)history -S と history -L が履歴ファイルを探すデフォルトの場所です。設定されていない場合、~/.history が使用されます。histfile は、異なるマシン間で同じホームディレクトリを共有する場合や、異なる端末で別々の履歴を保存する場合に便利です。通常、~/.tcshrc が ~/.history より先に読み込まれるため、histfile は ~/.login ではなく ~/.tcshrc に設定するべきです。
histlit (+)
設定されている場合、組み込みコマンドやエディタコマンド、および savehist 機能は、履歴リスト内の行をリテラル(展開されていない)形式で使用します。toggle-literal-history エディタコマンドも参照してください。
history
最初の単語は保存する履歴イベントの数を示します。オプションの第二引数(+)は履歴を表示する形式を指定します。指定がない場合、デフォルトで %h\t%T\t%R\n が使用されます。フォーマットシーケンスは prompt の下で説明されており、%R の変数的意味に注意が必要です。デフォルトで「100」に設定されています。
home
呼び出し元のホームディレクトリに初期化されます。~ のファイル名展開はこの変数を参照します。
ignoreeof
設定されている場合、入力デバイスが端末であるとき、EOF(End-of-File)コマンド(通常は空行で ^D を押すことによってユーザーが生成する)は、シェルを終了するのではなく、「Use "exit" to leave tcsh.」というメッセージを表示します。これにより、シェルが誤って終了するのを防ぎます。歴史的には、無限ループを防ぐために、連続する 26 回の EOF で終了する設定がありました。数値 n が設定されている場合、シェルは n - 1 回の EOF を無視し、n 回目の EOF で終了します(+)。未設定の場合、デフォルトで「1」に設定されており、1 回の ^D でシェルが終了します。
implicitcd (+)
設定されている場合、ディレクトリ名をコマンドとして入力すると、そのディレクトリに移動する要求として処理されます。verbose に設定すると、ディレクトリ変更が標準出力にエコーされます。この動作は、非インタラクティブなシェルスクリプトや複数の単語からなるコマンド文字列では抑制されます。ディレクトリ変更は同名のコマンドを実行するよりも優先されますが、エイリアス置換の後に行われます。チルダ(~)や変数の展開も期待通りに動作します。
inputmode (+)
設定されている場合、各行の先頭でエディタを「挿入モード」または「上書きモード」に設定します。
killdup (+)
kill ring(テキスト編集時の削除処理(Ctrl+K, Ctrl+Wなど)で保存されたメモリ領域内の文字列)における重複エントリの処理方法を制御します。次のオプションがあります:
all: kill ring に格納されるのは一意な文字列のみです。prev: 最後に削除された文字列が現在削除しようとしている文字列と同じであれば、現在の文字列は kill ring に格納されません。erase: 同じ文字列が kill ring に見つかった場合、その古い文字列は削除され、現在の文字列が挿入されます。
killring (+)
メモリ内で保持する「殺された文字列」の数を示します。デフォルトで「30」に設定されています。設定されていない場合、または「2」未満に設定されている場合、シェルは最も最近削除された文字列のみを保持します。文字列は、テキストを削除(kill)するエディタコマンド(例えば backward-delete-word や kill-line など)や、copy-region-as-kill コマンドによって killring に追加されます。yank エディタコマンドは最も最近削除された文字列をコマンドラインに貼り付け、yank-pop(エディタコマンド参照)を使用すると、以前に削除された文字列を貼り付けることができます。
listflags (+)
設定されている場合、'x'、'a'、または 'A'、その組み合わせ(例:'xA')は ls-F のフラグとして使用され、ls -xF、ls -Fa、ls -FA など、またはその組み合わせ(例:ls -FxA)のように動作します:
a: すべてのファイルを表示(.で始まるファイルも表示)。A:.と..を除くすべてのファイルを表示。x: ファイルを横並びに表示(縦並びではなく、横並びでソート)。
listflags の第二引数が設定されている場合、それは ls(1) のパスとして使用されます。
listjobs (+)
設定されている場合、ジョブが停止されるとすべてのジョブがリストされます。long に設定されている場合、リストは長い形式で表示されます。
listlinks (+)
設定されている場合、ls-F 組み込みコマンドは各シンボリックリンクが指すファイルの種類を表示します。
listmax (+)list-choices エディタコマンドでリストされるアイテムの最大数です。最大数に達すると、リストを表示する前に確認が求められます。
listmaxrows (+)list-choices エディタコマンドでリストされるアイテムの最大行数です。最大行数に達すると、リストを表示する前に確認が求められます。
loginsh (+)
シェルがログインシェルである場合にシェルによって設定されます。シェル内でこの変数を設定または解除しても効果はありません。shlvl 変数も参照してください。
logout (+)
シェルによって設定される値:
normal: 通常のログアウト前に設定されます。automatic: 自動ログアウト前に設定されます。hangup: シェルがハングアップシグナルで終了された場合に設定されます(シグナル処理参照)。
autologout シェル変数も参照してください。
mail
受信メールを確認するファイルやディレクトリの名前を、空白で区切って指定します。オプションで数値の単語を前に付けることもできます。プロンプトが表示される前に、最後の確認から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 mail.」というメッセージを表示することがあります(「You have new mail.」ではなく)。
matchbeep (+)
設定されている場合、補完の際にビープ音が鳴る条件を指定します:
never: 補完時にビープ音は鳴りません。nomatch: 一致するものがない場合にビープ音が鳴ります。ambiguous: 複数の一致がある場合にビープ音が鳴ります。notunique: 完全一致が1つあり、それ以外に長い一致がある場合にビープ音が鳴ります。
設定しない場合、デフォルトで ambiguous が使用されます。
nobeep (+)
設定されている場合、ビープ音が完全に無効化されます。visiblebell とも関連しています。
noclobber
設定されている場合、出力リダイレクトに制限がかかり、ファイルが誤って上書きされないようにします。また、>> のリダイレクトが既存のファイルを指すようになります。これは、入出力セクションに記載されている内容に従います。
noding
設定されている場合、時間指定での「DING!」メッセージがプロンプトに表示されるのを無効化します。これは時間の変化時に表示される「DING!」音を抑制します。
noglob
設定されている場合、ファイル名の置換(Filename substitution)とディレクトリスタックの置換(Directory stack substitution)が無効化されます。これは、ファイル名を扱わないシェルスクリプトや、ファイル名のリストを取得した後でさらに展開を行いたくない場合に特に便利です。
nokanji (+)
設定されている場合、シェルがKanjiをサポートしている場合でも、それを無効にしてメタキー(通常はAltキー)を使用できるようにします。
nonomatch
設定されている場合、ファイル名の置換やディレクトリスタックの置換が一致しない場合でもエラーにはならず、そのまま何も変更されません。ただし、置換式が不正な場合(例:echo [)は引き続きエラーになります。
nostat (+)
補完操作中に stat(2) を実行しないディレクトリのリスト(またはディレクトリにマッチするグロブパターン)です。通常、stat(2) に時間がかかるディレクトリ(例:/afs)を除外するために使用されます。
notify
設定されている場合、シェルはジョブの完了を非同期で通知します。デフォルトでは、ジョブの完了通知はプロンプトが表示される直前に行われます。
oid (+)
ユーザーの実際の組織ID(Domain/OS専用)。
owd (+)
以前の作業ディレクトリで、cd や pushd の - オプションと同様です。cwd や dirstack シェル変数と合わせて使用されます。
padhour
設定されている場合、24時間および12時間形式で時間を表示する際に、時間にゼロパディング(例:07:45:42 vs 7:45:42)が行われます。
path
実行可能なコマンドを探すためのディレクトリのリストです。空の単語が指定された場合、現在のディレクトリが含まれます。path 変数が設定されていない場合、フルパスのコマンドのみが実行可能になります。path はシェル起動時に PATH 環境変数から設定されます。また、PATH が存在しない場合、システム依存のデフォルト(例:(/usr/local/bin /usr/bsd /bin /usr/bin .))が設定されます。シェルによっては、path の中で .(カレントディレクトリ)が最初または最後に配置されるか、完全に除外される場合があります。これらの動作はシェルのコンパイル方法に依存します(version シェル変数を参照)。-c または -t オプションが指定されていないシェルは、~/.tcshrc を読み込んだ後や path がリセットされた後に path 内のディレクトリの内容をハッシュ化します。シェルがアクティブな状態で新しいコマンドを path 内のディレクトリに追加した場合、シェルがそのコマンドを見つけるためには rehash コマンドを実行する必要があります。
printexitvalue (+)
設定されている場合、インタラクティブプログラムが非ゼロの終了ステータスで終了すると、シェルは「Exit status」と表示します。
prompt
シェルが各コマンドを読み取る前に表示する文字列です。prompt には以下のフォーマット指定子(+)を含めることができ、これらは指定された情報に置き換えられます:
%/: 現在の作業ディレクトリ。%~: 現在の作業ディレクトリを表示。ただし、ホームディレクトリは~として、他のユーザーのホームディレクトリは~userとして表示されます(ファイル名置換に基づく)。~userの置換は、シェルが現在のセッションで既に~userをパス名に使っている場合のみ行われます。%c[[0]n], %.[[0]n]: 現在の作業ディレクトリの末尾のコンポーネント、または指定された場合はその末尾の n 個のコンポーネント。n が '0' で始まる場合、スキップされたコンポーネントの数が表示され、その後にスラッシュと一緒に表示されます(/<skipped>trailingの形式)。ellipsisシェル変数が設定されている場合、スキップされたコンポーネントは省略記号(...)で表示されます。~の置換は%~と同様に行われ、カウントには無視されます。%C:%cと同様ですが、~の置換は行われません。%h, %!, !: 現在の履歴イベント番号。%M: 完全なホスト名。%m: ホスト名の最初の部分(最初のドット.まで)。%S (%s): スタート(終了)モードを示す。反転表示を開始(終了)します。%B (%b): 太字モードを開始(終了)します。%U (%u): 下線モードを開始(終了)します。%t, %@: 12時間のAM/PM形式での時刻。%T: 24時間形式での時刻(ただし、ampmシェル変数に従う)。%p: 12時間AM/PM形式での「正確な」時刻(秒を含む)。%P:%pと同様ですが、24時間形式で表示されます(ampmシェル変数に従う)。\c:cはbindkeyのように解析されます。^c:cはbindkeyのように解析されます。%%: 単一の%。%n: ユーザー名。%j: 現在のジョブの数。%d: 曜日(Day形式)。%D: 日(dd形式)。%w: 月(Mon形式)。%W: 月(mm形式)。%y: 年(yy形式)。%Y: 年(yyyy形式)。%l: シェルの端末名。%L: プロンプトの末尾から画面の末尾または行末までをクリア。%$: シェルまたは環境変数名を'$'の直後に展開。%#: 通常ユーザーには'>'(またはpromptcharsシェル変数の最初の文字)、スーパーユーザーには'#'(またはpromptcharsの2番目の文字)。%{string%}: 文字列をリテラルのエスケープシーケンスとして含めます。これは主に端末属性を変更するために使用され、カーソルの位置を移動させないようにするべきです。このシーケンスはプロンプトの最後には置けません。%?: 前回実行したコマンドの終了コード。%R:prompt2ではパーサの状態、prompt3では修正された文字列、historyでは履歴文字列を表示します。
使用例
例えば、以下のように prompt を設定することができます:
1set prompt = "%m [%h] %B[%@]%b [%/] you rang? "
この場合、プロンプトは次のように表示されます:
1tut [37] [2:54pm] [/usr/accts/sys] you rang? _
また、%t, %@, %T, %p, %P が使用されていて、noding が設定されていない場合、時刻が変わる際に(例えば :00 分)「DING!」が表示されます。
デフォルト値
インタラクティブシェルでは、prompt はデフォルトで '%# ' に設定されています。
prompt2 (+)
シェルの while ループや foreach ループ内、および行が \ で終了する場合に表示するプロンプト文字列です。prompt と同じフォーマット指定子(+)を使用できますが、%R の変わり方に注意が必要です。デフォルトではインタラクティブシェルで '%R? ' に設定されています。
prompt3 (+)
自動的なスペル修正の確認を行う際に表示するプロンプト文字列です。こちらも prompt と同様にフォーマット指定子を使用できますが、%R の意味が異なります。インタラクティブシェルではデフォルトで 'CORRECT>%R (y|n|e|a)? ' に設定されています。
promptchars (+)
プロンプトの '%#' フォーマット指定子が、通常ユーザーにはその文字列の最初の文字、スーパーユーザーにはその2番目の文字に置き換えられます。これにより、通常ユーザーとスーパーユーザーのプロンプトに異なる文字を表示させることができます。
pushdtohome (+)
この変数が設定されている場合、pushd コマンドを引数なしで実行すると、pushd ~(ホームディレクトリへ移動)と同じ動作をします。cd と同じように、ホームディレクトリに移動することができます。
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 のフォーマット指定子が利用されます。
shell
シェルがインストールされているファイルパス。シェルが起動する際に使用される、シェルが存在する場所に関する情報です。シェルがファイルの実行権限が設定されていないが、シェルで解釈する必要がある場合に使用されます。
shlvl (+)
シェルのネストレベルを示します。ログインシェルでは1にリセットされます。これにより、シェルが何回入れ子になっているかがわかります。loginsh シェル変数とも関連しています。
status
パイプライン内のエラーやバッククォート展開の結果として伝播されるステータスは、statusによって示されます。ただし、tcsh_posix_status 変数が設定されている場合を除き、最後に実行されたコマンドのステータスのみが考慮されます(これはPOSIX互換のシェルでのデフォルトの挙動です)。異常終了した場合、ステータスに 0200 が加算されます。失敗した組み込みコマンドは終了ステータス '1' を返し、その他の組み込みコマンドはステータス '0' を返します。
symlinks (+)
シンボリックリンク('symlink')の解決方法を制御するために、いくつかの異なる設定値を指定できます:
- 'chase' に設定した場合: 現在のディレクトリがシンボリックリンクを含むディレクトリに変更されると、そのリンクはリンク先の実際のディレクトリ名に展開されます。ユーザーのホームディレクトリには適用されません。この挙動はバグとして扱われます。
- 'ignore' に設定した場合:
シェルは、リンクを越える前の現在のディレクトリを基準にして、現在のディレクトリを再構築しようとします。つまり、シンボリックリンクを通って
cdしてからcd ..で元のディレクトリに戻ります。この設定は組み込みコマンドとファイル名補完にのみ影響します。 - 'expand' に設定した場合:
シェルは、パス名のように見える引数を実際に展開することによってシンボリックリンクを修正しようとします。この設定は、組み込みコマンドだけでなく、すべてのコマンドに影響を与えます。残念ながら、コマンドオプション内に埋め込まれた認識しにくいファイル名など、難しい場合にはうまく機能しません。展開は引用符で防ぐことができます。この設定は通常最も便利ですが、引数の展開を認識できない場合に混乱を招くことがあります。適切な妥協策としては、'ignore' を使い、必要に応じてエディタコマンド
normalize-path(デフォルトでは^X-nにバインド)を使うことです。
いくつかの例を以下に示します。最初に、テストディレクトリを設定します:
1cd /tmp
2mkdir from from/src to
3ln -s from/src to/dst
symlinksの設定が無効(unset)の場合の動作:
1cd /tmp/to/dst; echo $cwd
2/tmp/to/dst
3cd ..; echo $cwd
4/tmp/from
symlinksの設定が 'chase' の場合:
1cd /tmp/to/dst; echo $cwd
2/tmp/from/src
3cd ..; echo $cwd
4/tmp/from
symlinksの設定が 'ignore' の場合:
1cd /tmp/to/dst; echo $cwd
2/tmp/to/dst
3cd ..; echo $cwd
4/tmp/to
symlinksの設定が 'expand' の場合:
1cd /tmp/to/dst; echo $cwd
2/tmp/to/dst
3cd ..; echo $cwd
4/tmp/to
5cd /tmp/to/dst; echo $cwd
6/tmp/to/dst
7cd ".."; echo $cwd
8/tmp/from
9/bin/echo ..
10/tmp/to
11/bin/echo ".."
12..
注意点: 'expand' の展開は、
cdのような組み込みコマンドに対しては 'ignore' と同じ動作をします。- 引用符で展開を防ぐことができます。
- 展開は、ファイル名が組み込みコマンド以外のコマンドに渡される前に行われます。
tcsh (+)
シェルのバージョン番号。形式は 'R.VV.PP' で、'R' はメジャーリリース番号、'VV' は現在のバージョン、'PP' はパッチレベルを表します。
term
端末の種類。通常、~/.login に設定され、起動およびシャットダウンの設定に関する説明があります。
timetime(組み込みコマンド)コマンドは、指定された秒数以上のCPU時間がかかる各コマンドの実行後に自動的に実行されます。
もし2番目の単語(引数)が指定されている場合、それは time コマンドの出力形式を指定するフォーマット文字列として使用されます。(u)
フォーマット文字列内で以下のシーケンスを使用できます:
%U: プロセスがユーザーモードで消費した CPU 秒数。%S: プロセスがカーネルモードで消費した CPU 秒数。%E: 経過時間(ウォールクロック時間)を秒単位で。%P: CPU 使用率。計算式は「(%U + %S) / %E」。%W: プロセスがスワップされた回数。%X: プロセスが使用した(共有)テキストスペースの平均量(KB単位)。%D: プロセスが使用した(非共有)データ/スタックスペースの平均量(KB単位)。%K: プロセスが使用した総メモリ量(%X + %D、KB単位)。%M: プロセスが最も多く使用したメモリ量(KB単位)。%F: プロセスが発生させたメジャーページフォールト(ページがディスクから読み込まれた回数)。%R: プロセスが発生させたマイナーページフォールトの回数。%I: プロセスが行った入力操作の回数。%O: プロセスが行った出力操作の回数。%r: プロセスが受信したソケットメッセージの回数。%s: プロセスが送信したソケットメッセージの回数。%k: プロセスが受信したシグナルの回数。%w: プロセスが行った自発的なコンテキストスイッチ(待機)の回数。%c: プロセスが行った非自発的なコンテキストスイッチの回数。
ただし、最初の4つのシーケンスは、BSDリソース制限機能がないシステムではサポートされていません。リソース使用報告機能をサポートするシステムのデフォルト時間フォーマットは、'%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww' です。リソース使用報告機能をサポートしないシステムでは、デフォルトの時間フォーマットは '%Uu %Ss %E %P' です。
Sequent の DYNIX/ptx システムでは、%X, %D, %K, %r, %s は利用できませんが、以下の追加のシーケンスがサポートされています:
%Y: 実行されたシステムコールの回数。%Z: ゼロ充填されたページの数(オンデマンドでゼロが埋められたページ)。%i: カーネルによってプロセスの常駐セットサイズが増加した回数。%d: カーネルによってプロセスの常駐セットサイズが減少した回数。%l: 実行された読み取りシステムコールの回数。%m: 実行された書き込みシステムコールの回数。%p: 生のディスクデバイスからの読み取り回数。%q: 生のディスクデバイスへの書き込み回数。
デフォルトの時間フォーマットは、'%Uu %Ss %E %P %I+%Oio %Fpf+%Ww' です。
CPU 使用率は、マルチプロセッサシステムでは 100% を超えることがあります。
tperiod (+)
周期的な特殊エイリアスが実行される間隔を分単位で設定します。
tty (+)
接続されている tty の名前。tty に接続されていない場合は空です。
uid (+)
ユーザーの実際のユーザーID。
user
ユーザーのログイン名。
verbose
設定されている場合、各コマンドの単語が表示されます(履歴の置換が行われた後)。-v コマンドラインオプションで設定できます。
version (+)
バージョンIDスタンプ。シェルのバージョン番号(tcsh を参照)、起源、リリース日、ベンダー、オペレーティングシステム、マシン(VENDOR, OSTYPE, MACHTYPE を参照)およびコンパイル時に設定されたオプションのカンマ区切りリストが含まれます。デフォルトで設定されているオプションには注釈が付けられています。
8b: シェルは8ビットクリーンです(デフォルト)。7b: シェルは8ビットクリーンではありません。wide: シェルはマルチバイトエンコーディング(UTF-8など)に対応しています。nls: システムのNLS(ネイティブ言語サポート)が使用されます。NLSをサポートするシステムではデフォルト。lf: ログインシェルは、/etc/csh.loginを/etc/csh.cshrcより前に実行し、~/.loginを~/.tcshrcと~/.historyより前に実行します。dl: セキュリティのため、パスの最後に.が追加されます(デフォルト)。nd: セキュリティのため、パスに.は含まれません。vi: エディタのデフォルトはviスタイルで、emacsスタイルではありません。dtr: ログインシェルは終了時にDTR(データ端末準備信号)を解除します。bye:byeはlogoutの同義語で、logはwatchlogの別名です。al: 自動ログアウトが有効です(デフォルト)。kan: ロケール設定に応じて、適切であればKanjiが使用されます。nokanjiシェル変数が設定されている場合を除きます。sm: システムのmalloc(3)が使用されます。hb: シェルスクリプトの実行時に、#!<プログラム> <引数>の形式がエミュレートされます。ng:newgrp組み込みが使用可能です。rh: シェルはREMOTEHOST環境変数を設定しようとします。afs: ローカル認証が失敗した場合、シェルはKerberosサーバーでパスワードを確認します。afsuserシェル変数またはAFSUSER環境変数が設定されている場合、ローカルユーザー名はこれらの値で上書きされます。
管理者は、ローカルバージョンの違いを示す追加の文字列を入力することができます。
visiblebell (+)
設定されている場合、音のベルの代わりに画面のフラッシュが使用されます。nobeep と関連しています。
watch (+)
ログインおよびログアウトを監視するためのユーザー/端末ペアのリストです。もしユーザーが「any」の場合、指定されたユーザーのためにすべての端末が監視され、逆に端末が「any」の場合、すべてのユーザーのために端末が監視されます。例えば、以下のように設定します:
1set watch = (george ttyd1 any console $user any)
この設定では、ユーザー「george」の ttyd1 端末での活動、コンソール上の任意のユーザー、そして自分自身(または不正アクセス者)による任意の端末での活動が報告されます。
ログインおよびログアウトのチェックはデフォルトで10分ごとに行われますが、watch の最初の単語に数値を設定すると、その間隔でチェックされます。例えば:
1set watch = (1 any any)
この設定では、1分ごとにログイン/ログアウトが報告されます。急いでいる場合は、log 組み込みコマンドを使っていつでもウォッチ報告をトリガーできます。watch が最初に設定されたとき、すべての現在のログインが報告されます(log 組み込みコマンドと同様)。
watch レポートのフォーマットは、who シェル変数で制御されます。
who (+)
watch メッセージのフォーマット文字列です。以下のシーケンスは、指定された情報に置き換えられます:
%n: ログインまたはログアウトしたユーザーの名前。%a: 観察されたアクション、つまり「ログイン」「ログアウト」または「olduserを置き換えた」など。%l: ユーザーがログインまたはログアウトした端末(tty)の名前。%M: リモートホストの完全なホスト名。もしログイン/ログアウトがローカルホストからのものであれば「local」と表示されます。%m: リモートホストのホスト名の最初の「.」までの部分。もしそれがIPアドレスやX Window Systemのディスプレイ名であれば、完全な名前が表示されます。 %M と %m は、リモートホスト名が/etc/utmpに格納されているシステムでのみ使用可能です。設定されていない場合、'%n has %a %l from %m.'が使用され、リモートホスト名が格納されていないシステムでは'%n has %a %l.'が使用されます。
wordchars (+)
forward-word や backward-word などのエディタコマンドで単語の一部として考慮される、アルファベット以外の文字のリストです。設定されていない場合、'*?_-.[]~=' が使用されます。
環境(Environment)
AFSUSER (+)afsuser シェル変数と同等です。
COLUMNS
端末の列数。端末管理を参照してください。
DISPLAY
X Window System(X(1) を参照)で使用されます。設定されている場合、シェルは自動ログアウト(autologout)を設定しません。
EDITOR
デフォルトのエディタへのパス名。VISUAL 環境変数や run-fg-editor エディタコマンドも関連しています。
GROUP (+)group シェル変数と同等です。
HOMEhome シェル変数と同等です。
HOST (+)
シェルが実行されているマシンの名前で初期化されます。これは gethostname(2) システムコールによって決定されます。
HOSTTYPE (+)
シェルが実行されているマシンの種類で初期化されます。これはコンパイル時に決定されます。この変数は廃止予定であり、将来的なバージョンで削除される予定です。
HPATH (+)run-help エディタコマンドがコマンドのドキュメントを探すためのディレクトリのコロン区切りリストです。
LANG
優先される文字環境を設定します。Native Language Systemサポートを参照してください。
LC_CTYPE
設定されている場合、ctype(文字の種類)に関する処理のみが変更されます。Native Language Systemサポートを参照してください。
LINES
端末の行数を設定します。端末管理を参照してください。
LS_COLORS
この変数の形式は、termcap(5) ファイル形式に似ています。コロン区切りの「xx=string」という形式の表現のリストで、ここで「xx」は2文字の変数名です。以下は変数とデフォルト値です:
no: 0 : 通常(ファイル名以外)のテキストfi: 0 : 通常のファイルdi: 01;34 : ディレクトリln: 01;36 : シンボリックリンクpi: 33 : 名前付きパイプ(FIFO)so: 01;35 : ソケットdo: 01;35 : ドアbd: 01;33 : ブロックデバイスcd: 01;32 : キャラクタデバイスex: 01;32 : 実行可能ファイルmi: (none) : 存在しないファイル(デフォルトは fi)or: (none) : 孤立したシンボリックリンク(デフォルトは ln)lc: ^[[ : 左コードrc: m : 右コードec: (none) : 終了コード(lc+no+rcで置き換えられる)
デフォルトから変更したい変数のみを設定すればよいです。
ファイル名は拡張子に基づいて色分けすることもできます。これは LS_COLORS 変数で *ext=string の構文を使用して指定します。たとえば、ISO 6429 コードを使用して、すべての C 言語のソースファイルを青色にしたい場合、*.c=34 と指定します。これにより、すべての .c ファイルが青(34)の色で表示されます。
制御文字は、Cスタイルのエスケープ表記または stty のような ^- 表記で記述できます。Cスタイルの表記では、Escape に ^[ を、通常のスペースには _ を、削除には ? を使います。さらに、^[ エスケープ文字は ^[, ^, :, = のデフォルトの解釈を上書きするためにも使用できます。
各ファイルは <lc> <color-code> <rc> <filename> <ec> の形式で書き出されます。<ec> コードが未定義の場合、<lc> <no> <rc> のシーケンスが代わりに使用されます。これを使う方が一般的には便利ですが、より一般的ではありません。左、右、終了コードは、共通の部分を繰り返し入力しなくて済むように、また異なる端末に対応するために提供されています。通常、ISO 6429 色コードを使用する端末以外ではこれらを変更する必要はありません。
端末が ISO 6429 色コードを使用する場合、タイプコード(lc, rc, ec を除く)は、セミコロンで区切った数値コマンドで構成できます。最も一般的なコマンドは以下の通りです:
0: デフォルトの色を復元1: 明るい色4: 下線付きテキスト5: 点滅するテキスト30: 黒色の前景色31: 赤色の前景色32: 緑色の前景色33: 黄色(または茶色)の前景色34: 青色の前景色35: 紫色の前景色36: シアン色の前景色37: 白色(または灰色)の前景色40: 黒色の背景色41: 赤色の背景色42: 緑色の背景色43: 黄色(または茶色)の背景色44: 青色の背景色45: 紫色の背景色46: シアン色の背景色47: 白色(または灰色)の背景色
すべてのコマンドがすべてのシステムや表示装置で動作するわけではありません。
いくつかの端末プログラムは、デフォルトの終了コードを正しく認識しないことがあります。ディレクトリのリストを表示した後にすべてのテキストが色分けされる場合、no と fi コードを 0 から標準の前景色および背景色の数値コードに変更してみてください。
MACHTYPE (+)
マシンの種類(マイクロプロセッサクラスまたはマシンモデル)、コンパイル時に決定されます。
NOREBIND (+)
設定されている場合、印刷可能な文字は self-insert-command に再バインドされません。Native Language System サポートを参照してください。
OSTYPE (+)
オペレーティングシステム、コンパイル時に決定されます。
PATH
実行可能ファイルを探すディレクトリのコロン区切りリストです。path シェル変数と同等ですが、異なる形式です。
PWD (+)cwd シェル変数と同等ですが、同期はされません。実際にディレクトリを変更した後のみ更新されます。
REMOTEHOST (+)
ユーザーがリモートからログインしている場合、そのホスト名です。シェルがリモートホストを検出できる場合のみ設定されます。シェルがこの機能でコンパイルされている場合に限り設定されます。version シェル変数を参照してください。
SHLVL (+)shlvl シェル変数と同等です。
SYSTYPE (+)
現在のシステムタイプ(Domain/OS のみ)。
TERMterm シェル変数と同等です。
TERMCAP
端末能力文字列です。端末管理を参照してください。
management.USERuser シェル変数と同等です。
VENDOR (+)
ベンダー名、コンパイル時に決定されます。
VISUAL
デフォルトの全画面エディタへのパス名です。EDITOR 環境変数や run-fg-editor エディタコマンドも参照してください。
ファイル(Files)
/etc/csh.cshrc
すべてのシェルで最初に読み込まれるファイル。ConvexOS、Stellix、Intel では /etc/cshrc を使用し、NeXT では /etc/cshrc.std を使用します。A/UX、AMIX、Cray、IRIX には csh(1) と同等のファイルはありませんが、tcsh ではこのファイルが読み込まれます。Solaris 2.x には存在せず、tcsh では /etc/.cshrc を読み込みます。
/etc/csh.login
ログインシェルによって /etc/csh.cshrc の後に読み込まれます。ConvexOS、Stellix、Intel では /etc/login を使用し、NeXT では /etc/login.std を使用します。Solaris 2.x では /etc/.login を使用し、A/UX、AMIX、Cray、IRIX では /etc/cshrc を使用します。
~/.tcshrc (+)
すべてのシェルで /etc/csh.cshrc またはその同等のファイルの後に読み込まれます。
~/.cshrc
すべてのシェルで、~/.tcshrc が存在しない場合に /etc/csh.cshrc またはその同等のファイルの後に読み込まれます。このマニュアルでは、~/.tcshrc が存在しない場合に ~/.cshrc を指す場合があります。
~/.history
ログインシェルによって、savehist が設定されている場合に ~/.tcshrc の後に読み込まれますが、histfile も参照してください。
~/.login
ログインシェルによって、~/.tcshrc または ~/.history の後に読み込まれます。シェルがコンパイルされていると、~/.tcshrc と ~/.history の前に ~/.login を読み込むこともあります。詳細は version シェル変数を参照してください。
~/.cshdirs (+)
ログインシェルによって、~/.login の後に読み込まれます。savedirs が設定されている場合に読み込まれますが、dirsfile も参照してください。
/etc/csh.logout
ログインシェルによってログアウト時に読み込まれます。ConvexOS、Stellix、Intel では /etc/logout を使用し、NeXT では /etc/logout.std を使用します。A/UX、AMIX、Cray、IRIX には csh(1) と同等のファイルはありませんが、tcsh ではこのファイルを読み込みます。Solaris 2.x には存在せず、tcsh では /etc/.logout を読み込みます。
~/.logout
ログインシェルによってログアウト時に /etc/csh.logout またはその同等のファイルの後に読み込まれます。
/bin/sh# で始まらないシェルスクリプトを解釈するために使用されます。
/tmp/sh*<< のための一時ファイルです。
/etc/passwd~name の置換のためのホームディレクトリのソースです。
シェルがコンパイルされた方法によっては、スタートアップファイルが読み込まれる順序が異なる場合があります。詳細は「Startup and shutdown」および version シェル変数を参照してください。
新機能(NEW FEATURES) (+)
このマニュアルでは、tcshを単一のエンティティとして説明していますが、経験豊富なcsh(1)ユーザーは、tcshの新機能に特に注目するべきです。
コマンドラインエディタ GNU Emacsまたはvi(1)スタイルのキーバインディングをサポートしています。詳細は「コマンドラインエディタ」と「エディターコマンド」を参照してください。
プログラム可能なインタラクティブワード補完とリスト表示 詳細は「補完とリスト表示」および「complete」および「uncomplete」組み込みコマンドを参照してください。
スペル補正 ファイル名、コマンド、および変数のスペル補正をサポートします。
エディターコマンド タイプ中のコマンドの途中で役立つ他の機能を実行するエディターコマンド。これには、ドキュメント検索(run-help)、クイックエディター再起動(run-fg-editor)、およびコマンド解決(which-command)が含まれます。
強化された履歴機構 履歴リスト内のイベントにタイムスタンプが追加されました。詳細は「history」コマンドおよび関連するシェル変数、「#」イベント指定子と新しい修飾子の「History substitution」、* -history、history-search-*、i-search-*、vi-search-*、toggle-literal-historyエディターコマンド、およびhistlitシェル変数を参照してください。
強化されたディレクトリ解析とディレクトリスタック処理 「cd」「pushd」「popd」「dirs」コマンドおよび関連するシェル変数、ディレクトリスタック置換の説明、dirstack、owd、symlinksシェル変数、normalize-commandおよびnormalize-pathエディターコマンドを参照してください。
グロブパターンでの否定 ファイル名置換における否定をサポートします。
新しいファイル問い合わせ演算子とfiletest組み込みコマンド 詳細は「ファイル問い合わせ演算子」を参照してください。
自動、定期的およびタイミングイベント 定期的に実行されるイベント、特別なエイリアス、自動ログアウトおよび端末ロック、コマンドタイミング、ログインとログアウトの監視をサポートします。
ネイティブ言語システム(NLS)のサポート NLSサポート、OSバリアント機能(echo_styleシェル変数)、およびシステム依存のファイル場所(FILES参照)をサポートします。
広範な端末管理機能 端末管理に関する詳細は「端末管理」を参照してください。
新しい組み込みコマンド 新たに追加された組み込みコマンドには、
builtins、hup、ls-F、newgrp、printenv、which、whereなどがあります(詳細は該当項目を参照)。新しい変数 シェルで有用な情報を簡単に利用できる新しい変数が追加されました。詳細は
gid、loginsh、oid、shlvl、tcsh、tty、uid、versionシェル変数、およびHOST、REMOTEHOST、VENDOR、OSTYPE、MACHTYPE環境変数を参照してください。プロンプト文字列に有用な情報を含める新しい構文 プロンプト文字列に有用な情報を含めるための新しい構文が導入されました(詳細は「プロンプト」を参照)。また、ループやスペル補正用の特別なプロンプトも追加されています(「prompt2」と「prompt3」を参照)。
読み取り専用変数 読み取り専用変数に関する詳細は「変数置換」を参照してください。
バグ(Bugs)
停止されたコマンドの再開時に誤ったディレクトリが表示される 停止されたコマンドを再開すると、現在のディレクトリと異なる場合、シェルはコマンドが開始されたディレクトリを表示します。これは、ジョブが内部でディレクトリを変更している場合には誤解を招くことがあります。
シェルの組み込み関数は停止・再開できない
a ; b ; cのようなコマンドシーケンスは、停止を試みても適切に処理されません。例えば、bを停止するとシェルは即座にcを実行します。これがエイリアスの展開から発生した場合、特に目立ちます。コマンドシーケンスを()で囲んでサブシェルで実行することで回避できます(例:( a ; b ; c ))。tty 出力の制御が初歩的 プロセスが開始された後の tty 出力の制御は非常に基本的です。仮想端末インターフェースを使用すれば、出力制御をさらに面白く行うことができます。
エイリアスの代わりにシェル手続きが提供されるべき エイリアスは最もよくシェル手続きを不器用に模倣するために使われますが、シェル手続き自体が提供されるべきです。
ループ内のコマンドが履歴リストに保存されない ループ内のコマンドは履歴リストに保存されません。制御構造は組み込みコマンドとして認識されるのではなく、解析されるべきです。これにより、制御コマンドはどこにでも配置でき、
|や&、;メタ構文と組み合わせて使うことができます。foreachがヒアドキュメントの終了を無視するforeachはヒアドキュメントの終了を探す際に、終了を無視してしまいます。コマンド置換の出力に
:修飾子が使えない コマンド置換の出力に:修飾子を使用することができるべきです。端末がカーソルを上に移動できない場合の画面更新が不十分 画面幅より長い行に関して、端末がカーソルを上に移動できない場合(端末タイプが 'dumb' の場合)、画面更新が非常に不十分です。
HPATH と NOREBIND は環境変数である必要はない
HPATHとNOREBINDは環境変数である必要はありません。グロブパターンが正しくネガティブマッチされない
?、*、[]を使用しないグロブパターンや{}や~を使用するものは正しくネガティブマッチされません。if の単一コマンド形式で偽の式の場合でも出力リダイレクションが行われる
ifの単一コマンド形式では、式が偽の場合でもコマンドが実行されずに出力リダイレクションが行われます。ls-Fがファイル識別文字を含んでソートし、制御文字が含まれるファイル名をうまく扱えないls-Fはファイル識別文字を含んでファイル名をソートし、制御文字を含むファイル名をうまく扱えません。また、インタラプトが効きません。コマンド置換は複数のコマンドや条件をサポートしていますが、ループや後方ジャンプ(backward gotos)はサポートしていません。
バグの報告は http://bugs.gw.com/ にて受け付けています。修正案を含めて報告していただけると助かります。tcshのメンテナンスやテストに協力したい場合は、メールで tcsh-request@mx.gw.com 宛に「subscribe tcsh」とだけ記載したメッセージを送信してください。
Tcsh の "T" について(The T In Tcsh)
1964年、DEC(デジタル・エクイップメント・コーポレーション)はPDP-6を発表しました。PDP-10はその後継機で、1970年頃、DECが第二モデルであるKI10を発表した際に、DECsystem-10として再命名されました。
TENEXは、1972年にボルト・ベアネック・アンド・ニューマン(マサチューセッツ州ケンブリッジのシンクタンク)によって開発された、仮想記憶を要求ページング方式で実装したオペレーティングシステムです。DECのPDP-10用に新しいページャを開発し、それに対応するオペレーティングシステムも作られました。このシステムは学界で非常に成功を収めました。
1975年、DECはPDP-10の新モデルであるKL10を発表しました。この新しいマシンには、BBNからライセンスを受けたTENEXのみを搭載する予定でした。そして、この新しいバージョンはTOPS-20(商標登録されているその大文字表記)と呼ばれました。しかし、多くのTOPS-10(PDP-10用のオペレーティングシステム)ユーザーが反発し、その結果、DECは同じハードウェア上で互換性のない2つのシステムをサポートすることになりました。それでも、PDP-11には6つも異なるシステムがあったのです!
TENEXと、バージョン3までのTOPS-20では、ULTCMDと呼ばれるユーザーコードレベルのサブルーチンライブラリによるコマンド補完機能が提供されていました。バージョン3では、DECはその機能やその他の機能をモニター(Unixの「カーネル」に相当)に統合し、COMND% JSYS('Jump to SYStem'命令、スーパーバイザコールメカニズム)を通じてアクセスするようになりました。
tcshの作成者は、TENEXおよびTOPS-20のこの機能をはじめとするいくつかの機能に感銘を受け、それらを模倣したcshのバージョンを作成しました。
制限(Limitations)
- システムは引数リストをARG_MAX文字に制限しています。
- ファイル名展開を含むコマンドの引数数は、引数リストに許可されている文字数の1/6に制限されます。
- コマンド置換は、引数リストで許可されている文字数を超えることはできません。
- ループを検出するために、シェルは1行あたりのエイリアス置換の回数を最大20回に制限しています。
バージョン(Version)
このマニュアルは、tcsh 6.17.00 (Astron) 2009-07-10を記録しています。