Tclインタープリタを作成、操作します。本コマンドは1つ以上の新しいインタープリタを作成します。同じアプリケーション内に作成されているインタープリタと共存します。(マスタ)と呼ばれ、新しいインタープリタはslave(スレーブ)と呼ばれます。マスタは複数のスレーブを作成でき、各スレーブも自身がマスターとなってスレーブを作成できます。従ってインタープリタは階層的になります。各インタープリタは他のインタープリタから独立しており、コマンド、プロシージャ、グローバル変数は独立して存在しています。呼ばれるメカニズムを用いて、マスタとスレーブとの間の接続関係を作成することもできます。別名コマンドを作成することにより、マスタおよび他のスレーブ内のコマンドを呼び出すことができます。環境変数はアプリケーションにおける全てのインタープリタ間で共用されます。(openコマンドによって返される)ファイルハンドル等はインタープリタ間では共用されないことに注意してください。ファイルを共用したり、オープンしたファイルを他のインタプリタに引き渡すためには別途用意されているコマンドを明示的に使用する必要があります。(安全な)インタープリタを作成することができます。安全なインタープリタとは、機能が非常に制限されたスレーブインタープリタです。その目的は他のインタープリタにダメージを与えることなく、またアプリケーションの環境を損傷することなく安全にスクリプトを実行することにあります。全てのIOチャネル作成コマンドまたサブプロセス作成コマンドは、安全なインタープリタから遠ざけられます。INTERPRETERSを参照して下さい。危険な機能は安全なインタープリタから取り除かれるのではなく、隠されいる(hidden)だけですので、信用できる環境でのみ使用するインタープリタなら、危険な機能を持たせることもできます。隠しコマンドを参照して下さい。別名メカニズムがどのように機能するかに関するより詳細情報は別名の呼び出しを参照して下さい。インタープリタを識別する名前はTclリスト形式です。このリストはインタープリタ階層に従って順に名前を並べたものです。インタプリタを使用するときはこのようなリスト型でインタプリタ名を指定します。a11}と記述します。後述のinterpコマンドはこのようなリスト形式でのスレーブ名を引数として受け取ります。識別されるインタープリタということになります。別名を除いて、スレーブインタープリタから名前によって自分のマスタインタープリタを参照することは不可能であることに注意してください。アプリケーションにおいて作成された最初のインタープリタを参照できるグローバル名もありません。この二つの制限は安全性確保を目的にしたものです。interpコマンドinterpコマンドはスレーブインタープリタの作成や削除、及び操作に使われます。チャネルをインタープリタの間で共有または転送すために使われます。引数に応じて、以下の形式のいずれかを持つことができます。関連付けられたターゲットコマンドの名称とアーギュメントをTclリストで返します。(このリストは別名コマンドが作成されたとき指定されたアーギュメントと同じものです。それに関連付けられたコマンドの名称とが異なっていることもあり得ます。関連付けられていたターゲットコマンド名が返ります。ターゲットコマンドが改名された場合、別名コマンドは削除されます。...?このコマンドは指定スレーブに、他のスレーブのコマンドをリモート実行するための別名コマンドを作成します。他のスレーブは、同階層のものでも下位の階層ののものでも許されます。別名コマンドを作成するスレーブとそのコマンド名称を指定します。スレーブが階層構造である場合Tclリスト形式で与えます。最後の要素が目的のスレーブ名であり、前の要素は親スレーブです。呼び出している(interpコマンドを実行している)インタープリタのスレーブです。空リストは、コマンドを呼び出しているインタープリタを示します。ターゲットインタープリタとコマンド名を指定します。追加引数を指定します。呼び出されるとき、引数の前に追加されます。存在しない場合も既に存在する場合もありますが、このコマンドによって作成されることはありません。コマンドが呼び出されます。詳しい情報は別名の呼び出しを参照してください。よって示されたインタープリタに定義されている全ての別名コマンド名をTclリストで返します。?path?スレーブインタープリタを作成します。作成するスレーブ名を与えます。スレーブ名をTclリストで与えると、リストで示されたスレーブ階層の最下層に新しいスレーブを作成する指定になります。上層のスレーブは既に存在していなければなりません。cである場合、cという新しいスレーブインタープリタがbスレーブの中に作成されます。コマンドのコマンド名になります。0からはじまるユニークな整数です。interp0になります。-safeスイッチが指定された場合(あるいはマスタインタープリタが安全なインタープリタであるなら)、新しいスレーブインタープリタは、限られた機能性を持つ安全なスレーブインタープリタとして作成されます。ない場合、そのスレーブはTcl固有のコマンドと変数の完全なセットを含むものとして作成されます。-スイッチはスイッチの終わりを示します。-safeのような名称である場合、--スイッチが必要になります。コマンドの結果は、新しいインタープリタ名です。スレーブインタープリタ名はそのマスタスレーブ内でユニークでなければなりません。同名のスレーブインタープリタが既に存在する場合にはエラーが発生します。スレーブインタープリタの再帰コール制限数は親インタープリタの制限数となります。(ここまで翻訳見直しました。引数によって与えられた0個または0以上のインタープリタを削除します。そのスレーブも削除します。コマンドは削除された各インタープリタのスレーブコマンドも削除します。引数に対して、その名前によるインタープリタが存在しない場合、このコマンドはエラーを出力します。識別されたスレーブインタープリタにおけるTclスクリプトとして評価します。結果はコール側のインタープリタに返されます。ない場合0を返します。省略されると、コール側のインタープリタが使われます。(現在、この名前が全て::なしの正当なグローバルネームスペース名しか受け入れられません)に改名します。ターゲット名を持っている公開されたコマンドが既に存在すると、このコマンドは失敗します(参照:隠しコマンド)。与えられない場合、同じ名前を保持します。ターゲット名を持っている隠されたコマンドが既に存在すると、このコマンドは失敗します。両方とも、ネームスペース修飾子を含むことができず、エラーが発生します。hideによって隠されたコマンドは、たとえ現在のネームスペースがグローバルなものではなくても、グローバルネームスペースにおいて検索されます。これはスレーブが現在のネームスペースをグローバルなものと異なるものにすることによって、マスタインタープリタを騙して誤ったコマンドを隠すことを防止します(参照:隠しコマンド)。示されたインタープリタにおいて全ての隠されたコマンド名のリストを返します。書き換えまたは評価は引数に適用されません。-globalフラグが存在すると、隠されたコマンドはターゲットインタープリタにおけるグローバルレベルで呼び出されます。それ以外の場合は、現在のコールフレームで呼び出され、このフレームと外側のコールフレームにおいてローカル変数にアクセスすることができます(参照:隠しコマンド)。指定されたインタープリタが安全であれば1、そうでなければ0を返します。指定されたインタープリタに、「信用できる」というマークを付けます。隠しコマンドを公開しません。このコマンドは信用されたインタープリタからしか呼び出すことができません。指定されたインタープリタの許容できる最大のネスト深さを返します。回以上のネスティングで、エラーを返します。newlimit値も返されます。値は1からプラットホームでのnon-long整数の最大値の間の正整数でなければなりません。このコマンドは、ただTclコールスタックの最大サイズを設定するだけです。これだけでは、アプリケーションに使われるCスタック上のスタックオーバフローを防止できません。マシンがCスタックのサイズの限界を持っていれば、このコマンドに設定された境界に到達する前にスタックオーバフローに遭遇するでしょう。これを避けるには使用しているシステムにCスタックの最大サイズを増大させるメカニズムがあるかどうかを調べて使うといいでしょう。示されたインタープリタの間で共有できる状態にします。両方のインタープリタとも、IOチャネルに同じアクセス権を持っています。両方のインタープリタは、関連するIOチャネルを閉じなければなりません。インタープリタが破壊されたとき、このインタープリタの持つ全てのアクセス可能なIOチャネルは自動的に閉じられます。示されたインタープリタと関連していた全てのスレーブインタープリタ名をTclリストで返します。省略されるならば、起動されているインタープリタが使われます。alias別名のターゲットインタープリタを記述するTclリストを返します。同様に、インタープリタパスとソースコマンド名前で指定されます。ターゲットインタープリタ名は、コール側のインタープリタに相対的なインタープリタパスとして返されます。別名のターゲットインタープリタが、コール側のインタープリタである場合、空のリストが返されます。別名のターゲットインタープリタがコール側のインタープリタ、あるいはその子孫の1つでない場合は、エラーが生成されます。ターゲットコマンドがこの呼び出しの時に定義される必要はありません。destPathchannelIdで示されたIOチャネルを、destPathで示されたインタープリタにおいて利用可能にし、srcPathで示されたインタープリタにおいて利用不可能にします。slaveコマンドinterpコマンドによって作成された各スレーブインタープリタのために、新しいTclコマンドは、新しいインタープリタと同じ名前を持つマスタインタープリタの中で、作成されます。このコマンドはインタープリタに対する様々な操作を呼び出すために使えます。的フォーマットは以下の通りです。argsは、コマンドの正確な動作を決定します。このコマンドの正当なフォーマットは以下の通りです。aliasesTclリストを返します。おける全ての別名の名前です。srcCmdTclリストを返します。(これらの全てが、その別名が作成された時に指定された値です。異なる可能性があります。ための別名を削除します。別名が作成された名前を示します。ソースコマンドが改名された場合、改名されたコマンドは削除されます。...?別名を作成します。マスタにおいて呼び出されます。呼び出し中に渡されたあらゆる引数の前に追加されます。INVOCATIONを参照して下さい。結果はコール側のインタープリタに返されます。(現在、この名前が全て::なしの正当なグローバルネームスペース名しか受け入れられません)に改名します。ターゲット名を持っている公開されたコマンドが既に存在すると、このコマンドは失敗します。与えられない場合、同じ名前を保持します。ターゲット名を持っている隠されたコマンドが既に存在すると、このコマンドは失敗します。両方とも、ネームスペース修飾子を含むことができません。しないとエラーが出力されます。隠されるコマンドは現在のネームスペースがグローバルなものでなくても、グローバルネームスペースにおいて検索されます。これは、スレーブが現在のネームスペースをグローバルなものと異なるものにすることによって、マスタインタープリタを騙して誤ったコマンドを隠すことを防止します。おいて全ての隠されたコマンド名のリストを返します。書き換えまたは評価は引数に適用されません。-globalフラグが存在すると、隠されたコマンドはスレーブにおけるグローバルレベルで呼び出されます。それ以外の場合は、現在のコールフレームで呼び出され、このフレームと外側のコールフレームにおいてローカル変数にアクセスすることができます。issafeスレーブインタープリタがが安全であれば1、そうでなければ0を返します。marktrustedスレーブインタープリタに、「信用できる」というマークを付けます。このコマンドは信用されたインタープリタからしか呼び出すことができません。このコマンドはスレーブインタープリタにおいて、いかなる隠しコマンドを公開しません。スレーブインタープリタが既に信用されるならば、このコマンドは効果がありません。インタープリタの許容する最大のネスト深さを返します。再帰の限界は設定されます。回以上のネスティングでエラーを返します。newlimit値も返されます。値は1から、プラットホームでのnon-long整数の最大値の間の正整数でなければなりません。このコマンドはただTclコールスタックの最大サイズを設定するだけです。アプリケーションに使われるCスタック上のスタックオーバフローを防止できません。マシンにCスタックのサイズの限界を持っていれば、このコマンドに設定された境界に到達する前にスタックオーバフローに遭遇するかもしれません。これが起きた場合、該当するシステムにCスタックの最大サイズを増大させるメカニズムがあるかどうかを調べて使うといいでしょう。安全なインタープリタ安全なインタープリタは制限された機能性を持つものです。従って、最も悪い敵から任意のスクリプトを実行しても安全であり、スクリプトは囲んでいるアプリケーションまたは他の計算環境への損害をもたらす恐れがありません。インタープリタを安全にするために、いくつかのコマンドと変数はインタープリタから除かれます。ディスク上でファイルを作成させるコマンドは除かれます。execコマンドはサブプロセスによって損害を引き起こすことに使われるので削除されます。これらの機能への制限されたアクセスは、マスタインタープリタで別名を作成することによって提供されます。それらの引数をチェックし、これらの機能の安全なサブセットに制限されたアクセスを提供します。ファイルの作成は特定なサブディレクトリにしか許可されないようにします。サブプロセスの呼び出しは慎重に選択され、かつ固定したプログラムセットにだけ許可するようにします。コマンドに指定することによって作成されます。安全なインタープリタによって作成されたあらゆるスレーブも安全です。安全なインタープリタは次の固有コマンドのセットを作成します。安全なインタープリタを作成するときに隠されます。sourceこれらのコマンドはTclのプロシージャまたは別名として再作成されます。exposeによって再び公開できます。Tclのサポートプロシージャのライブラリからの次のコマンドは安全なインタープリタに現れません。unknown安全なインタープリタはデフォルトのunknownコマンドを持っていません。従って、Tclのデフォルトオートローディング機能が利用できないことを、特に注意して下さい。tcl_wordBreakBeforeは、安全なインタープリタにおけるunknownコマンドの明白な定義によってしか提供できません。sourceコマンドを公開することが必要になります。作成することによって、最も容易に成し遂げられます。loadコマンド、及び他のTclコマンドの安全なバージョンを提供します。env変数は安全なインタープリタに現れませんので、環境変数をほか他のインタープリタと共有できません。ユーザーが鋭敏な情報を環境変数に格納できるので、env変数は安全性に危険をもたらします。PGPマニュアルはPGPプライベートなキー保護パスワードを環境変数PGPPASSに格納することを勧めます。安全なインタープリタで信用されないコードの実行を利用可能にするこの変数を作ることは、安全性にリスクを招きます。拡張が安全なインタープリタにロードされると、それらも自身の機能性を制限し、危険なコマンドを消去します。Safe-TclとloadTclコマンドに関するマニュアルのエントリを参照します。安全なインタープリタは自身を含む、いかなるインタープリタの再帰限界を変更できません。名のターゲットが信用されたマスタであるために、安全な使用を可能にするように、慎重に設計されました。安全を保証する際の最も重要なことは、スレーブからマスタに渡された情報が、決してマスタにおいて評価、または書き換えられないことを保証することです。評価、または書き換えが発生する場合、スレーブにおける有害なスクリプトは、マスタで任意のファンクションを呼び出すことが可能になる恐れがあります。これは安全性を脅かします。別名のソースがスレーブインタープリタにおいて呼び出されるとき、通常のTcl書き換えはコマンドの分析中に行いません。いかなるインタープリタで行われた書き換えと同様に、これらの書き換えはソースインタープリタで実行されます。